从块中调用的方法是否需要使用 weakSelf?
Do methods called from within a block need to use weakSelf?
如果块内的代码调用了一个方法,如果该方法引用了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?
}
Objective-C 没有像您建议的那样限定范围,也就是说,您无权从 -doSomething 中访问 weakSelf。此外,当您在 weakSelf 上调用 -doSomething 时,该调用中的 "self" 实际上指的是与 weakSelf 相同的对象。
简而言之,不,你不应该,你不能也不应该。
您可以这样做来摆脱保留循环问题。
[self class] __weak *weakSelf = self;
self.completionBlock = ^{
[self class] __strong *strongSelf = weakSelf
[weakSelf doSomething];
};
只有当你在块中保留自己时,才会触发保留循环。否则它只会发出警告。
很好,你可以用这个。因为块保留了内部使用的每个变量,所以保留循环就像
- 自己会保留区块
- 如果块保留自身则
- 自己会再次保留区块
- 块会保留自己,所以循环继续
你在方法中所做的只是消息传递。每次块被调用时,都会向自己发送一条消息来做某事。并且您可以在 doSomething 方法中保留自我,它不会触发保留循环,因为此方法没有自我循环。希望你明白:)
- (void)doSomething
{
self.myProperty = 5; // Is this ok or does it need to use a weakSelf?
}
如果块内的代码调用了一个方法,如果该方法引用了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?
}
Objective-C 没有像您建议的那样限定范围,也就是说,您无权从 -doSomething 中访问 weakSelf。此外,当您在 weakSelf 上调用 -doSomething 时,该调用中的 "self" 实际上指的是与 weakSelf 相同的对象。
简而言之,不,你不应该,你不能也不应该。
您可以这样做来摆脱保留循环问题。
[self class] __weak *weakSelf = self;
self.completionBlock = ^{
[self class] __strong *strongSelf = weakSelf
[weakSelf doSomething];
};
只有当你在块中保留自己时,才会触发保留循环。否则它只会发出警告。
很好,你可以用这个。因为块保留了内部使用的每个变量,所以保留循环就像
- 自己会保留区块
- 如果块保留自身则
- 自己会再次保留区块
- 块会保留自己,所以循环继续
你在方法中所做的只是消息传递。每次块被调用时,都会向自己发送一条消息来做某事。并且您可以在 doSomething 方法中保留自我,它不会触发保留循环,因为此方法没有自我循环。希望你明白:)
- (void)doSomething
{
self.myProperty = 5; // Is this ok or does it need to use a weakSelf?
}