ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ typedef ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ IntToStringConverter. ΠΡΠ°ΠΊ, ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Objective-C, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° IntToStringConverter:
β (NSString *) convertIntToString-NSUInteger)paramInteger
usingBlockObject-IntToStringConverter)paramBlockObject{
return paramBlockObject(paramInteger);
}
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ convertIntToString:, ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π½Π° Π½Π°Ρ Π²ΡΠ±ΠΎΡ (ΠΏΡΠΈΠΌΠ΅Ρ 7.2).
ΠΡΠΈΠΌΠ΅Ρ 7.2. ΠΡΠ·ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅
β (void) doTheConversion{
NSString *result = [self convertIntToString:123
usingBlockObject: intToString];
NSLog(@"result = %@", result);
}
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ , ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ . Π ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ doTheConversion ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ convertIntToString: usingBlockObject: Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ intToString. Π§ΡΠΎ Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π°Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π² ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ? ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΎ Π±Ρ Π½Π°ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ, Π±Π»ΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° doTheConversion (ΠΏΡΠΈΠΌΠ΅Ρ 7.3).
ΠΡΠΈΠΌΠ΅Ρ 7.3. ΠΠ»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ
β (void) doTheConversion{
IntToStringConverter inlineConverter = ^(NSUInteger paramInteger){
NSString *result = [NSString stringWithFormat:@"%lu",
(unsigned long)paramInteger];
return result;
};
NSString *result = [self convertIntToString:123
usingBlockObject: inlineConverter];
NSLog(@"result = %@", result);
}
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ 7.1 ΠΈ 7.3. Π― ΡΠ΄Π°Π»ΠΈΠ» ΠΈΠΌΠ΅Π²ΡΠΈΠΉΡΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠΈΠ³Π½Π°ΡΡΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ°Π½Π½Π°Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠ° ΡΠΎΡΡΠΎΡΠ»Π° ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° β (^intToString) (NSUInteger). ΠΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ Π½Π΅ ΡΡΠΎΠ³Π°Ρ, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. ΠΠΎ ΡΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³Ρ ΡΠΎΡΠ»Π°ΡΡΡΡ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π½Π°ΠΊΠ° ΡΠ°Π²Π΅Π½ΡΡΠ²Π° (=) Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Ρ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΡ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ: IntToStringConverter inlineConverter. Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΌΠΎΠ³Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΡΡΠΈΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π° ΠΏΡΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΈΠΌΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π±ΡΠ» ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
β (void) doTheConversion{
NSString *result =
[self convertIntToString:123
usingBlockObject: ^NSString *(NSUInteger paramInteger) {
NSString *result = [NSString stringWithFormat:@"%lu",
(unsigned long)paramInteger];
return result;
}];
NSLog(@"result = %@", result);
}
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ 7.2. ΠΠ±Π° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° usingBlockObject. ΠΠΎ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΌΡ ΡΡΡΠ»Π°Π»ΠΈΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (intToString), Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½Π° Π»Π΅ΡΡ. Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ convertIntToString: usingBlockObject: ΠΊΠ°ΠΊ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
7.2. ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π² Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Objective-C ΠΈ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π² Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ .
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ .
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Objective-C.
β’ ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ°, Π½ΠΎ ΠΈ ΡΠ΅, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠΉ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ).
β’ ΠΠ΅Π»ΡΠ·Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° self Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ , ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Objective-C. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ self, ΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π§ΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈ ΡΠ°ΠΊΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
β’ ΠΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½Π° self ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π»ΠΈΡΡ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° self ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
β’ ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π²Π½ΡΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π½Π΅ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠ»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Ρ ΡΠΈΠΏΠΎΠΌ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ __block. ΠΡΠΈΠΌΠ΅Ρ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ.
β’ ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° NSObject, Π° Π²Π½ΡΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ GCD. ΠΠ½ΡΡΡΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΡΠΎΠ³ΠΎ NSObject, Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π±Π»ΠΎΠΊ.
β’ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ NSObject Π²Π½ΡΡΡΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ-ΡΡΡΠ°Π½ΠΎΠ²ΡΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»ΡΠΌΠΈ ΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ². ΠΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²Π½ΡΡΡΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΡΠ΅ΡΠ½ΠΎΠΉ Π½ΠΎΡΠ°ΡΠΈΠΈ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΡΡΠΈΠΌΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π΄Π²ΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ, Π° Π΄ΡΡΠ³ΠΎΠΉ β Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ:
void (^independentBlockObject)(void) = ^(void){
NSInteger localInteger = 10;
NSLog(@"local integer = %ld", (long)localInteger);
localInteger = 20;
NSLog(@"local integer = %ld", (long)localInteger);
};
ΠΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ, Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
local integer = 10
local integer = 20
ΠΠΎΠΊΠ° Π²ΡΠ΅ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π»Ρ Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ:
β (void) simpleMethod{
NSUInteger outsideVariable = 10;
NSMutableArray *array = [[NSMutableArray alloc]
initWithObjects:@"obj1",
@"obj2", nil];
[array sortUsingComparator: ^NSComparisonResult(id obj1, id obj2) {
NSUInteger insideVariable = 20;
NSLog(@"Outside variable = %lu", (unsigned long)outsideVariable);
NSLog(@"Inside variable = %lu", (unsigned long)insideVariable);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. */
return NSOrderedSame;
}];
}
ΠΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° sortUsingComparator:, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ NSMutableArray, ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΌΠ°ΡΡΠΈΠ². Π¦Π΅Π»Ρ ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, β ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠ»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ insideVariable. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ outsideVariable. Π§ΡΠΎΠ±Ρ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ³ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² outsideVariable, Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ outsideVariable ΠΏΡΠ΅ΡΠΈΠΊΡ __block, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΏ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ:
β (void) simpleMethod{
__block NSUInteger outsideVariable = 10;
NSMutableArray *array = [[NSMutableArray alloc]
initWithObjects:@"obj1",
@"obj2", nil];
[array sortUsingComparator: ^NSComparisonResult(id obj1, id obj2) {
NSUInteger insideVariable = 20;
outsideVariable = 30;
NSLog(@"Outside variable = %lu", (unsigned long)outsideVariable);
NSLog(@"Inside variable = %lu", (unsigned long)insideVariable);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. */
return NSOrderedSame;
}];
}
ΠΠΎΡΡΡΠΏ ΠΊ self Π²ΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΠΊΠ° self ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ self, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ΅ΡΠΎΠ΄ simpleMethod ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° ΡΠ·ΡΠΊΠ° Objective-C:
β (void) simpleMethod{
NSMutableArray *array = [[NSMutableArray alloc]