这基本上就是我在代码中所做的事情,不确定触发强引用属性的块是否会导致保留周期。有什么见解吗?
@interface MyClass : NSObject
@property(nonatomic, weak) id object1;
@property(nonatomic) id object2;
@end
@implementation MyClass
- (void)myMethod
{
[self.object2 performBlock:^{
[self.object1 performSelector:@selector(mySelector)];
}];
}
@end
由于
答案 0 :(得分:2)
由于我们不知道object2
的课程,我们不知道它的performBlock
方法实际上做了什么。但是,听起来它可能会立即运行阻止,并且不会持续存储对它的强引用。
如果是这种情况,则没有保留周期。
答案 1 :(得分:2)
MyClass 强烈引用 object2 ,并且在您传递给 object2 performBlock 的块中保持对自我的强烈引用( MyClass 实例)。
object2 是否保留对此块的强引用?如果是,那么是的,您将获得保留周期。但是,如果在 performBlock 方法的范围内调用该块然后丢弃(不是由object2存储),则您不会遇到问题。
如果你不确定你可以安全地玩,并在街区中传递一个弱的自我引用:
__typeof(self) __weak weakSelf = self;
[self.object2 performBlock:^{
[weakSelf.object1 performSelector:@selector(mySelector)];
}];