NSAutoReleasePoolの仕組みを理解するのが難しいです。NSAutoreleasePool EXC_BAD_ACCESSとObjective-Cでのメモリ管理について
1)NSAutoReleasePoolは、各割り当てを個別に追跡しますか、それとも変数に依存して動作しますか?換言すれば、このリークメモリを行い、または放出の両方?:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray* myObj = [NSObject alloc];
myObj = [NSObject alloc];
[pool release];
2)なぜ次のコード作業:
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
NSArray* myObj = [NSObject alloc];
for(int i = 0; i < 100; i++) {
[myObj release];
myObj = [NSObject alloc];
}
[pool1 release];
が、以下は、[pool1 release]
にEXC_BAD_ACCESSを与える:
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
NSArray* myObj = [NSObject alloc];
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
for(int i = 0; i < 100; i++) {
[myObj release];
myObj = [NSObject alloc];
}
[pool2 release];
[pool1 release];
3)上のコード(2つのプールを持つもの)?
次回は、
を使用しないでください。パネル内で「」をクリックするか、{}記号をクリックしてください。これはここでのやり方です:D – vodkhang
知らなかった。ありがとう – Caner
あなたはautoreleaseプールが_autoreleased_オブジェクトをリリースし、任意のオブジェクトをリリースする責任があることに気づいていません。あなたのテストオブジェクトを初期化していないだけでなく、オートレリースしていないので、オートリリースプールはそれらに触れません。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDBおよびhttp://developer.appleを参照してください。 .com/library/mac /#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html%23 // apple_ref/doc/uid/20000047-CJBFBEDI –