NSStringで奇妙な動作を見つけました。以下のコードを実行しようとしましたが、これに気づきました。
NSString *str = [[NSString alloc] initwithstring : @"hello"];
[str release];
NSLog(@" Print the value : %@", str);
ここでは、リリースされたオブジェクトにアクセスしているため、3行目でアプリがクラッシュするはずです。しかし、それはstrの値を出力しています。クラッシュしていません。しかし、NSArrayを使用すると、異なる動作が観察されました。
NSArray *array = [[NSArray alloc] initwithobjects : @"1", @"2", nil];
[array release];
NSLog(@"Print : %@", [array objectatindex : 0]);
NSLog(@"Print : %@", [array objectatindex : 0]);
コードには、NSArrayに使用される2つのNSLogステートメントがあります。ここでは、最初のNSLogが実行されたときに解放した後、値を出力しています。しかし、2番目のNSLogが実行されると、アプリがクラッシュします。アクセスされたアレイはすでに解放されているため、アプリのクラッシュは許容されます。ただし、最初のNSLogが実行されるとクラッシュするはずです。2番目ではありません。
この振る舞いを手伝ってください。これらの場合のリリースの仕組み。
ありがとうJithen