解决循环引用问题 - MRC
使用__unsafe_unretained
解决。在MRC环境下不支持使用__weak
,使用原理同ARC环境下相同,这里不在赘述。
使用__block
也能解决循环引用的问题。因为上文__block
内存管理中提到过,MRC环境下,尽管调用了copy操作,__block
结构体不会对person产生强引用,依然是弱引用。因此同样可以解决循环引用的问题。
__strong
和 __weak
__weak typeof(self) weakSelf = self;
person.block = ^{
__strong typeof(weakSelf) myself = weakSelf;
NSLog(@"age is %d", myself->_age);
};
在block
内部重新使用__strong
修饰self
变量是为了在block
内部有一个强指针指向weakSelf
避免在block
调用的时候weakSelf
已经被销毁。