这就是我学到的:使用self
保留块时
我需要一个weakSelf
来打破保留周期
我需要一个strongSelf
来防止self
中途变为零
所以我想测试strongSelf
是否真的可以像这样保持self
的生命:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
self.test = @"test";
NSLog(@"%@",self.test);
__weak typeof(self)weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
__strong typeof(weakSelf)strongSelf = weakSelf;
strongSelf.test = @"newTest";
NSLog(@"%@",strongSelf.test);
});
}
- (void)dealloc {
NSLog(@"dealloc");
}
@end
ViewController将被推入navigationController并立即弹出。输出是
为什么为空?
还有一个问题,我有一个项目,其中包含成吨的
weakSelf
而不包含strongSelf
块,并且我收到很多11号崩溃的信号。有关系吗是否值得在每个文件中添加strongSelf
? 最佳答案
strongSelf
确保如果尚未释放self
,则不会在块执行期间将其释放。
如果在创建strongSelf
之前自我消失了,它将为零。
您应该检查strongSelf
是否包含以下内容:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
typeof(weakSelf)strongSelf = weakSelf; // __strong is not needed
if(strongSelf){
strongSelf.test = @"newTest";
NSLog(@"%@",strongSelf.test);
}
});
关于ios - 我是否需要强壮自我来保持自我活力,强壮自我真的有效吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29093677/