如果块内的代码调用方法,如果该方法引用self,是否会存在保留周期?换句话说,块下游的所有代码是否都需要使用weakSelf / strongSelf模式?
例如:
__weak __typeof__(self) weakSelf = self;
Myblock block = ^{
[weakSelf doSomething];
};
。 。
- (void)doSomething
{
self.myProperty = 5; // Is this ok or does it need to use a weakSelf?
}
答案 0 :(得分:1)
Objective-C不像您建议的那样作用域,即您无法从-doSomething内访问weakSelf。此外,当你在weakSelf上调用-doSomething时,该调用中的“self”实际上指的是weakSelf所在的同一个对象。
总之,不,你不应该,你不能,你不应该。
答案 1 :(得分:1)
仅当您在块内保留self时才会触发保留周期。否则它只会发出警告。
这很好,你可以使用它。因为块保留了内部使用的每个变量,所以保留循环就像
你在方法中所做的只是消息传递。每次调用块都会将消息发送给自己做一些事情。并且你可以在doSomething方法中保留self,它不会触发保留循环,因为这个方法没有自循环循环。希望你理解:)
- (void)doSomething
{
self.myProperty = 5; // Is this ok or does it need to use a weakSelf?
}
答案 2 :(得分:0)
你可以这样做以摆脱保留周期问题。
[self class] __weak *weakSelf = self;
self.completionBlock = ^{
[self class] __strong *strongSelf = weakSelf
[weakSelf doSomething];
};