1

__blockこれは、ブロック内のオブジェクトを解放するためのの使用に関するものです。

NSString *str = [SomeObject methodName]; // returned object is autoreleased
[str retain];   //retaining the object since its auto released 

これで、このstrオブジェクトをブロック内で使用します。ブロック内で私はこのオブジェクトを解放します。__block NSString *str = ..iamがブロック内でリリースするので、接頭辞としてlikeを付ける必要がありますか?ルールから、ブロック内のオブジェクトを変更する場合は、プレフィックスを.で付ける必要があることを理解しています__block。しかし、このルールはリリースにも適用されますか?

4

1 に答える 1

3

変更する変数にはNo.__blockが必要です。オブジェクトを解放することは、変数を変更することを意味しません。むしろ、問題のオブジェクトにメッセージを送信することを意味します。他のメッセージと同様に、修飾子がなくても、ブロック内のオブジェクト インスタンスに送信できない理由はありません。releaserelease__block

__block修飾されていないオブジェクト変数の場合、ブロックはオブジェクトを保持することに注意してください。したがって、releaseブロック内の明示的なものはretain、ブロックが呼び出される前/外側のバランスをとることができますが、他のオブジェクトがそれを保持していなくても、ブロック自体が解放されるまで、オブジェクトは実際には (少なくとも) 解放されません。

于 2012-07-20T04:04:49.547 に答える