这是安全的吗?
__weak typeof (self) welf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[welf doStuff];
})
....
-(void)doStuff {
[_member1 someMethod];
....
[_member2 someMethodWithParam:_someCArray[1];];
}
据我了解ARC,对[welf doStuff]
的实际调用应该没问题,因为welf
将有效(并且方法调用将继续),或者它将是{{1}调用nil
上的任何方法都是在Objective-C中定义的安全行为,所以看起来没问题。
然而,一旦我们进入nil
,ARC是否会在方法调用期间保留doStuff
?如果确实如此,我认为我们应该没问题......如果没有,那么self
可以在方法调用的中途获得self
,然后我们就会陷入困境点。
注意:我用谷歌搜索但是找不到任何明显的东西。也许它很难搜索?
谢谢!
答案 0 :(得分:0)
您需要在块内创建对self的强引用,并在其上调用方法。
__weak typeof (self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
typeof(self) strongSelf = weakSelf;
[strongSelf doStuff];
})
是的,Orion,您的问题由this question itself和this particular anwswer
回答答案 1 :(得分:-1)
事实证明我最终找到了答案,在这里:https://stackoverflow.com/a/18011581/234和此处:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#self
ARC下{p>self
总是unsafe unretained
,所以在我的例子中,它不安全,并且没有什么可以阻止它通过我的doStuff
方法中途解除分配。哎哟