【发布时间】:2012-09-07 18:46:24
【问题描述】:
假设我的班级看起来像
@interface MyClass {
MyObject* _object;
dispatch_queue_t _queue;
}
-(void)myBlocksUsingMethod;
@end
忽略初始化队列的语义,现在我实现
-(void)myBlockUsingMethod {
dispatch_async(_queue, ^{
[_object doSomething];
});
}
如上代码所示,在块中保留 self 可以吗?
我可以像这样重写块
-(void)myBlockUsingMethod {
__weak MyClass* weakSelf = self;
dispatch_async(_queue, ^{
MyClass* strongSelf = weakSelf;
[strongSelf._object doSomething];
});
}
但鉴于我的_queue 是我保留的对象的 iVar,现在是否有必要测试 strongSelf == nil 在这种情况下?
另外,如果我的doSomething 方法将引用self 的另一个块推送到同一个队列会发生什么?这会导致保留周期吗?
【问题讨论】:
标签: objective-c automatic-ref-counting objective-c-blocks