ブロックを呼び出す前/呼び出し後、retaincountは常に1です。 apple block docから、自己が保持する必要があることがわかります。なぜ誰かが知ることができますか?ブロック内に自己保持されますか?
NSLog(@"Before block retain count: %d", [self retainCount]);
void (^block)(void) = ^(void){
UIImage* img = [UIImage imageNamed:@"hometown.png"];
[self setImage:img];
NSLog(@"After block retain count: %d", [self retainCount]);
};
block();
文書ではちょうど言った: 参照カウント環境では、ブロック内のObjective-Cオブジェクトを参照するとき、デフォルトでは保持されます。これは、単にオブジェクトのインスタンス変数を参照したとしても当てはまります。ただし、__blockストレージタイプ修飾子でマークされたオブジェクト変数は保持されません。 アップルの医者は本当に私をたくさん混乱させました。ありがとうございました。 – joshualmf
ドキュメントにバグを登録してください。私は同意する - それは完全にはっきりしていない。 retain *は、ブロックがコピーされ、インスタンス変数を取り囲む言語が少しだけオフになっている場合にのみ発生することがより明白であるべきです。 – bbum