NSMutableArray *array = [[NSMutableArray alloc]
initWithObjects:@"obj1",
@"obj2", nil];
[array sortUsingComparator: ^NSComparisonResult(id obj1, id obj2) {
NSLog(@"self = %@", self);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. */
return NSOrderedSame;
}];
}
ΠΠ΅ Π²Π½Π΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ self Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅. ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
void (^incorrectBlockObject)(void) = ^{
NSLog(@"self = %@", self); /* self Π·Π΄Π΅ΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½. */
};
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ self Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ self, Π²Π°ΡΠ΅ΠΌΡ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
void (^correctBlockObject)(id) = ^(id self){
NSLog(@"self = %@", self);
};
β (void) callCorrectBlockObject{
correctBlockObject(self);
}
ΠΡΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΈΠΌΡ self. ΠΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΈΠΌΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΅ΡΠ»ΠΈ Π½Π°Π·Π²Π°ΡΡ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ self, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΊΠΎΠ΄ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ·ΠΆΠ΅ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Objective-C. ΠΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΈΠΌΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° self, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ΄ Π±ΡΠ» Π²ΠΎΡΠΏΡΠΈΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΠ΅ΡΠ½ΡΡ Π½ΠΎΡΠ°ΡΠΈΡ β ΠΎΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² self ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ Ρ Π½Π°Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ Π΅ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΈΠΏΠ° NSString, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ stringProperty:
#import Β«AppDelegate.hΒ»
@interface AppDelegate()
@property (nonatomic, copy) NSString *stringProperty;
@end
@implementation AppDelegate
Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΎΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Π²ΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅:
β (void) simpleMethod{
NSMutableArray *array = [[NSMutableArray alloc]
initWithObjects:@"obj1",
@"obj2", nil];
[array sortUsingComparator: ^NSComparisonResult(id obj1, id obj2) {
NSLog(@"self = %@", self);
self.stringProperty = @"Block Objects";
NSLog(@"String property = %@", self.stringProperty);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. */
return NSOrderedSame;
}];
}
ΠΠΎ Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠ΅ΡΠ½ΡΡ Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ:
void (^correctBlockObject)(id) = ^(id self){
NSLog(@"self = %@", self);
/* ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄-ΡΡΡΠ°Π½ΠΎΠ²ΡΠΈΠΊ */
self.stringProperty = @"Block Objects"; /* ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ */
/* ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ. */
NSLog(@"self.stringProperty = %@",
self.stringProperty); /* ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ */
};
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ-ΡΡΡΠ°Π½ΠΎΠ²ΡΠΈΠΊΠΎΠΌ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΌ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°:
void (^correctBlockObject)(id) = ^(id self){
NSLog(@"self = %@", self);
/* ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. */
[self setStringProperty:@"Block Objects"];
/* ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. */
NSLog(@"self.stringProperty = %@",
[self stringProperty]);
};
ΠΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΠΏΠΈΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΉ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, β Π½Π΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
typedef void (^BlockWithNoParams)(void);
β (void) scopeTest{
NSUInteger integerValue = 10;
BlockWithNoParams myBlock = ^{
NSLog(@"Integer value inside the block = %lu",
(unsigned long)integerValue);
};
integerValue = 20;
/* ΠΡΠ·ΡΠ²Π°Π΅ΠΌ Π±Π»ΠΎΠΊ Π·Π΄Π΅ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ integerValue. */
myBlock();
NSLog(@"Integer value outside the block = %lu",
(unsigned long)integerValue);
}
ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 10. ΠΠ°ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½, ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΡΠ΅ΠΌ (ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ Π΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ) ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΡΡΠΈΡΠ°ΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π‘ΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° 20 Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΠ²Π΅Π΄Π΅Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 20, Π½ΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ. ΠΠ½ Π²ΡΠ²Π΅Π΄Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 10, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π·Π΄Π΅ΡΡ:
Integer value inside the block = 10
Integer value outside the block = 20
ΠΠΎΡ ΡΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. ΠΠ»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π΄Π»Ρ ΡΠ΅Π±Ρ ΠΊΠΎΠΏΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ integerValue, Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΌ, Π³Π΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊ. ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡ: ΠΏΠΎΡΠ΅ΠΌΡ ΠΆΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ integerValue? ΠΡΠ²Π΅Ρ ΠΏΡΠΎΡΡ, ΠΈ ΠΌΡ ΡΠΆΠ΅ Π΄Π°Π»ΠΈ Π΅Π³ΠΎ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΡΠ»ΠΈ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° __block, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΏ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° scopeTest ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ integerValue ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ __block, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΌ ΡΠΈΠΏ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠ°ΠΊ:
β (void) scopeTest{
__block NSUInteger integerValue = 10;
BlockWithNoParams myBlock = ^{
NSLog(@"Integer value inside the block = %lu",
(unsigned long)integerValue);
};
integerValue = 20;
/* ΠΡΠ·ΡΠ²Π°Π΅ΠΌ Π±Π»ΠΎΠΊ Π·Π΄Π΅ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ integerValue. */
myBlock();
NSLog(@"Integer value outside the block = %lu",
(unsigned long)integerValue);
}
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° scopeTest, ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Integer value inside the block = 20
Integer value outside the block = 20
ΠΡΠ°ΠΊ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°ΠΉΡΠ΅ ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΡΠΈΡΡΠ²Π°ΠΉΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π² Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. ΠΠ΅ΡΠ΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π», Π΅ΡΠ»ΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π·Π°Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΠ΅Π³ΡΠ»ΠΈΡΡΡΡΠΈΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π² Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ .
7.3. ΠΡΠ·ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π° ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ Π²Π°ΡΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ C. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ β Π² ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Β».
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π ΡΠ°Π·Π΄Π΅Π»Π°Ρ 7.1 ΠΈ 7.2 Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Π° Π±Π»ΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ Π±Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C:
void (^simpleBlock)(NSString *) = ^(NSString *paramString){
/* Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ paramString. */
};
β (void) callSimpleBlock{
simpleBlock(@"O'Reilly");
}
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π΄Π΅ΠΉΡΡΠ²ΡΠΉΡΠ΅ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ C:
NSString *(^trimString)(NSString *) = ^(NSString *inputString){
NSString *result = [inputString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
return result;
};
NSString *(^trimWithOtherBlock)(NSString *) = ^(NSString *inputString){
return trimString(inputString);
};
β (void) callTrimBlock{
NSString *trimmedString = trimWithOtherBlock(@" O'Reilly ");
NSLog(@"Trimmed string = %@", trimmedString);
}
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ callTrimBlock Π½Π° ΡΠ·ΡΠΊΠ΅ Objective-C: