假设我的班级看起来像
@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];
});
}
但是现在是否有必要测试strongSelf == nil
在这种情况下是否考虑到 my_queue
是我保留的对象的 iVar?
另外,如果我的doSomething
方法是将引用的另一个块推self
送到同一个队列中会发生什么?这会导致保留周期吗?