I need to know if I do it correctly. The application is running OK but I’m not sure I get the lifecycle correctly (leak ?).
Note: Instrument see no leak.
The code of a method aaa: of some class A:
- (void) aaa {
NSString *path = ...something...;
NSBlockOperation* theOp = [NSBlockOperation blockOperationWithBlock: ^{
// using path
[self somethingElseWith:path];
}];
[self.aQueue addOperation:theOp];
}
So I create a block to put on aQueue (NSOperationQueue*). The goal is to offload from the main thread the long running somethingElseWith: method, so that the GUI continue to be responsive.
Inside the block I reference the local var “path” that will be out of scope at the end of the aaa: method.
If I read the doc correctly, the block will do a retain on ‘path’. But is ARC inserting a release at the end of this block implicitly ? Would be logical and nice.
Or should I declare ‘path’ as __block and assign it to nil at the end of my block ? (manual…)
Not sure I understand how to use __weak in this context.
The
pathvariable is fine. You may however need to avoid a retain cycle by using aweakreference toself. IfaQueueis astrongreference there may be a retain cycle causingselfnever to be released.Solution:
Make sure the operation does not get called after the class should no longer exist.