Objective c 从块内调用的方法是否需要使用weakSelf?
如果块中的代码调用一个方法,如果该方法引用self,是否会存在保留周期?换句话说,块下游的所有代码都需要使用weakSelf/strongSelf模式吗 例如:Objective c 从块内调用的方法是否需要使用weakSelf?,objective-c,objective-c-blocks,retain-cycle,Objective C,Objective C Blocks,Retain Cycle,如果块中的代码调用一个方法,如果该方法引用self,是否会存在保留周期?换句话说,块下游的所有代码都需要使用weakSelf/strongSelf模式吗 例如: __weak __typeof__(self) weakSelf = self; Myblock block = ^{ [weakSelf doSomething]; }; Objective-C的范围并不像你建议的那样,也就是说,你不能从剂量内接触到weakSelf。此外,当您在weakSelf上调用-doSomethin
__weak __typeof__(self) weakSelf = self;
Myblock block = ^{
[weakSelf doSomething];
};
Objective-C的范围并不像你建议的那样,也就是说,你不能从剂量内接触到weakSelf。此外,当您在weakSelf上调用-doSomething时,该调用中的“self”实际上是指weakSelf所在的同一对象
简言之,不,你不应该,你不能,你不应该。你可以这样做,以摆脱保留周期的问题
[self class] __weak *weakSelf = self;
self.completionBlock = ^{
[self class] __strong *strongSelf = weakSelf
[weakSelf doSomething];
};
仅当您将自身保留在块内时,才会触发保留循环。否则它只会发出警告 这很好,你可以用这个。因为块保留了内部使用的每个变量,所以保留周期如下
谢谢,我知道strongSelf——我应该在示例代码中包含它,以避免混淆。不过,问题的关键是要找出从块内调用的方法是否也需要进行弱自我/强自我舞蹈。如果一个块调用methodOne,methodOne引用了
self
,那么这会触发一个retain循环吗?但是,我现在发现这个问题没有真正意义,因为如果需要weakSelf,它需要在被调用的方法之外定义,并且没有实际的方法可以做到这一点。只有在块内保留self时,才会触发Retain cycle。否则它只会发出警告。
[self class] __weak *weakSelf = self;
self.completionBlock = ^{
[self class] __strong *strongSelf = weakSelf
[weakSelf doSomething];
};
- (void)doSomething
{
self.myProperty = 5; // Is this ok or does it need to use a weakSelf?
}