Objective c 在NSBlockOperation中访问self–;保持循环?

Objective c 在NSBlockOperation中访问self–;保持循环?,objective-c,Objective C,这是否会创建一个保留周期?我保留对操作队列的引用,但不保留对操作的引用。想法?这可能会产生一个保留周期。创建指向self的弱指针并使用该指针: self.operationQueue = [[NSOperationQueue alloc] init]; [self.operationQueue addOperationWithBlock:^{ [self doSomethingElse]; }]; - (void)doSomethingElse { [self

这是否会创建一个保留周期?我保留对操作队列的引用,但不保留对操作的引用。想法?

这可能会产生一个保留周期。创建指向self的弱指针并使用该指针:

self.operationQueue = [[NSOperationQueue alloc] init];
[self.operationQueue addOperationWithBlock:^{
    [self doSomethingElse];        
}];

- (void)doSomethingElse {
    [self doAnother];
}
编辑:

在你的区块中,创建一个指向self的强引用。评估指针以确保其有效且安全。您的代码片段(基于您所描述的内容)应为:

_weak MyObject *weakSelf = self;

那么在doSomethingElse中呢?为了调用另一个
doather
,我是否也必须传递弱引用?然后确保在self的
dealloc
@isaac中调用
cancelAllOperations
,答案只是故事的一半。在块之前,他应该说
\u weakmyobject*weakSelf=self但是块内的第一件事,他应该说
MyObject*strongSelf=self从那时起,他只能参考
strongSelf
。为什么?这是一个线程,<代码>懦弱是弱的,所以自我可以在操作的中间消失。这样,如果self在块的开头存活下来,它就会被保留下来,并且在块执行的过程中一直保持活动状态。但你们不会跟随。即使我在调用
doSomething
时使用了对self的弱引用,我在调用self的另一个方法中是否会产生一个保留周期?您不会。在另一种方法中,
self
是一个参数。
self.opeartionQueue = [[NSOperationQueue alloc] init];
_weak MyObject *weakSelf = self;
[[self operationQueue] addOperationBlock:^{

    _strong MyObject *strongSelf = weakSelf; // Obtain a strong reference so our pointer won't dangle out from under us...

    if(strongSelf) // Make sure it's valid
    {
        [strongSelf doSomethingElse]; // Do your work
    }
}