私はすでに次の問題についてレーダー (rdar://12311693、http ://openradar.appspot.com/12311693 ) を提出しましたが、誰かが間違いを見つけられるかどうかを確認するために、ここにも投稿すると思いました。クラッシュにつながる可能性のある私のコード。
次のコード サンプルは、コンパイラの最適化をオン (-Os) にしてビルドすると過剰リリースによりクラッシュしますが、コンパイラの最適化をオフ (-O0) にするとクラッシュしません。プロジェクトは Xcode 4.4.1 (4F1003)、Apple LLVM コンパイラ 4.0 でビルドされています。
num2 が過剰にリリースされると、アプリがクラッシュします。ゾンビ オブジェクトを有効にして、これが事実であることを確認します。
// This crashes under -Os, but not under -O0
NSNumber *num1 = @((float)arc4random() / (float)UINT32_MAX);
NSNumber *num2 = @((float)arc4random() / (float)UINT32_MAX);
NSNumber *foo1 = num1;
NSNumber *foo2 = num2;
for (NSUInteger i=0; i<2; i++) {
NSLog(@"foo1: %p %@", foo1, foo1);
NSLog(@"foo2: %p %@", foo2, foo2);
// swap foo1 and foo2
foo1 = num2;
foo2 = num1;
}