跳到主要内容

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外部的变量。