私はいくつかのtypedefを持っています:
typedef void (^myBlock)(SomeObject);
そして、私はいくつかのオブジェクトを持っています
@interface SomeObject : NSObject
@end
// Method of some arbitrary class
- (void) someMethod1 {
SomeObject *someObject = [[SomeObject alloc] init];
myBlock block = ^(SomeObject obj){
// When _block(someObject)_ will be called inside someQueue -
// Is it guaranteed that someObject will be alive, retained inside me?
// Do something complex and involving (or not) obj ...
}
dispatch_async(someQueue, ^{
// Some bunch of code - after which we are sure that
// by the next line someMethod1 will run out, so its scope is lost
block(someObject);
});
}
問題はブロック変数のブロック内に置かれます: someQueueキュー内のブロックブロックに渡す someObject オブジェクトが生きていて、ブロックブロック内に保持されることが保証されていますか?
この質問は、私が今尋ねた質問のもう少し複雑なバリエーションです:オブジェクトをブロックに渡すと、そのライフサイクルが保持されることが保証されますか? .