彼此多个块,使用强自我和弱自我来避免保留周期

时间:2014-07-15 20:13:56

标签: objective-c cocoa-touch cocoa objective-c-blocks

我确实习惯了写

__weak typeof( self ) wself = self
[smth doSomeBlock:^(void) {
   __strong typeof( wself ) sself = wself;
   [sself callAny];
}]

所以我避免保留周期

但是当嵌套多个块时该怎么办?

__weak typeof( self ) wself = self
[smth doSomeBlock:^(void) {
   __strong typeof( wself ) sself = wself;
   [sself doSomeBlock:^(void) {
       // wself, or sself? my mind is blown
       // what if another block?
   }];
}]

1 个答案:

答案 0 :(得分:3)

你的第一个例子看起来像是在浪费你的努力。保留周期没有问题,除非:self拥有smth并且smth拥有块并且在self被销毁之前您不会销毁块。如果其中任何一个不成立,就没有理由去做弱/强舞。

第二种情况是相同的:嵌套不会改变任何东西。是否有从self到Block的所有权链?如果不是,那么使用哪一类指针并不重要。