刚刚注意到某些Objective-c代码中的__block
关键字,如下所示:
// myString passed into the method
__block NSString *_myString = myString;
__block
关键字如何改变上述代码的行为?
答案 0 :(得分:6)
此变量修饰符使变量能够在块的范围内进行修改。
答案 1 :(得分:0)
只有上面的语句__block修饰符不会做任何事情。但是,在块的上下文中,__block允许在此方法中定义的块来变量变量。
__block NSString *myString = @"My string";
NSLog(@"myString: %@", myString);
dispatch_async(dispatch_get_main_queue(), ^{
myString = @"My string changed.";
});
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"myString: %@", myString);
});
在此示例中,块可以将myString更改为指向新变量。通过引用传递变量是不合适的。如果我从myString的声明中删除__block修饰符,我会得到一个编译说明,"变量不可分配(缺少__block类型说明符)。
答案 2 :(得分:0)
它允许以下几点:
__block
变量。