我先定义了一个Person,有个成员变量isMan,重写了他的dealoc方法。 viewController有一个block属性myblock。
@interface Person : NSObject
{
@public BOOL isMan;
}
- (void)dealloc
{
NSLog(@"dealloc------%p---------------------",self);
}
Block访问成员变量
Person* p = [Person new];
NSLog(@"%p init----------------",p);
self.myblock = ^(void){
p->isMan = YES;
};
0x282d4d880 init----------------
dealloc方法并没有走,证明强引用了,如何消除?大家都知道。
发现报错了stackoverflow.com/questions/1…
应该在block里再声明一个strongself的局部变量,防止block内代码执行过程中第一行对象还在,然后执行到最后一行时突然释放掉。
Person* p = [Person new];
NSLog(@"%p init----------------",p);
__weak typeof(Person*) weakP = p;
self.myblock = ^(void){
__strong typeof(Person*) strongP = weakP;
strongP->isMan = YES;
};