我是否会导致保留周期?

时间:2017-05-10 14:52:50

标签: objective-c

这基本上就是我在代码中所做的事情,不确定触发强引用属性的块是否会导致保留周期。有什么见解吗?

@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

由于

2 个答案:

答案 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)];
}];