Object-C在block内如何修改block外部变量?
参考答案:
在Objective-C中,如果你想在block内部修改block外部的变量,你需要确保该变量是在block的可见作用域内,并且你使用了__block
存储类说明符来修饰这个变量。这样,Objective-C 运行时就会知道这个变量可能会被block捕获,并且可能需要在堆上分配这个block以保持对变量的引用。
下面是一个简单的例子,展示了如何在block内部修改block外部的变量:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 定义一个外部的变量
__block int externalVariable = 10;
// 定义一个block
void(^myBlock)(void) = ^{
// 在block内部修改外部变量
externalVariable = 20;
NSLog(@"externalVariable in block: %d", externalVariable);
};
// 调用block
myBlock();
// 验证外部变量是否被修改
NSLog(@"externalVariable after block: %d", externalVariable);
}
return 0;
}
在这个例子中,externalVariable
是一个在block外部定义的变量,我们使用__block
修饰符来标记它。然后,在block内部,我们可以安全地修改externalVariable
的值。当block执行完毕后,externalVariable
的值会被修改,并且可以在block外部访问到这个修改后的值。
注意,如果你没有使用__block
修饰符,那么block会捕获变量的一个副本,而不是直接引用变量本身。这意味着在block内部对变量的修改不会影响到block外部的变量。