ネストされたブロックの __block 変数に問題があります。私の質問は、次のようなコードが機能するかどうかです。
__block NSString* s = nil;
[self methodWithBlock:^
{
s = [self methodThatReturnsAnAutoreleasedString];
[self methodWithBlock:^
{
[NSLog @"%d", s.length];
}];
}];
内部ブロックs
が保持されていると仮定しましたが、私のコードではそうではないようです。内部ブロックにアクセスすると、 「割り当て解除されたインスタンスにメッセージが送信されました」と表示されます。s
割り当て時に s を保持すると ( s = [[self methodThatReturnsAnAutoreleasedString] retain];
)、正常に動作します。
もちろん、それは私の実際のコードではなく、より複雑ですが、その最小限の例がうまく機能するかどうかを知りたいだけです。もしそうなら、他の場所で問題を探す必要があります。