-1

私はいくつかの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 オブジェクトが生きていて、ブロックブロック内に保持されることが保証されていますか?

この質問は、私が今尋ねた質問のもう少し複雑なバリエーションです:オブジェクトをブロックに渡すと、そのライフサイクルが保持されることが保証されますか? .

4

2 に答える 2

1

ブロックとそれが使用するすべてのものは、ブロックが実行されるまで保持されます..それはキャプチャされます

于 2012-12-16T16:47:50.697 に答える
0

あなたが求めていることは前の質問と同じだと思います。ここでの唯一の違いは、ブロック内でメソッドを呼び出しているのではなく、ブロックを呼び出していることです。
おそらく私の答えは十分に明確ではありませんでした。すべてがブロック内に保持され、ブロックであっても保持されます。

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);
});

ブロック内で someObject を呼び出すため、someObject がキャプチャされます。ブロックもキャプチャされます。

于 2012-12-16T16:44:28.393 に答える