文章目录
OC对象 - Block修改变量
1. 尝试修改
如下代码:
typedef void (^ZSXBlock)(void);
int main(int argc, const char * argv[]) {
@autoreleasepool {
int age = 10;
ZSXBlock block = ^ {
age = 20;
NSLog(@"age is %d", age);
};
block();
}
return 0;
}
尝试修改age的值,但是编译报错了

1.1 底层实现
将上述代码转成C++

此时会报错,先把age = 20注释掉

直接修改肯定是改不了的
2. 可行修改方法
2.1 static
typedef void (^ZSXBlock)(void);
int main(int argc, const char * argv[]) {
@autoreleasepool {
static int age = 10;
ZSXBlock block = ^ {
age = 20;
NSLog(@"age is %d", age);
};
block();
}
return 0;
}


给age增加static修饰符后,可以修改
2.1.1 底层实现

通过指针的方式访问,自然是可以修改了
2.2 全局变量
全局变量,全局都可以直接访问,不经过结构体指针,就可以直接修改的
typedef void (^ZSXBlock)(void);
int no_ = 10;
int main(int argc, const char * argv[]) {
@autoreleasepool {
static int age = 10;
ZSXBlock block = ^ {
age = 2
OCBlock中修改变量的深入剖析:static、全局变量与__block

本文详细探讨了在Objective-C中如何在Block中修改变量,包括使用static、全局变量以及__block修饰符的方法。特别关注了__block如何通过结构体包装实现局部变量的修改,并展示了内存地址的分析过程。
最低0.47元/天 解锁文章
1078

被折叠的 条评论
为什么被折叠?



