0

私はXcode 4の初心者です。

最近、Objective C プログラムをデバッグしています。私はこのような関数を書きます:

-(void) func{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    Product *product=(Product *)[appDelegate.productData objectAtIndex:0];
    NSLog(product.Name);
    [product release];
    [pool release];
}

面白いのは、製品リリースを追加したことです (初期のデバッグでプール リリース コードを認識していないため...)

プログラムを実行すると、EXC_BAD_ACCESS で停止します。
製品リリースを削除すると、正常に動作します。
製品オブジェクトが最終的にリリースされているかどうかは本当にわかりません。
そして、これが EXC_BAD_ACCESS を作成する主なポイントであるかどうかはわかりません。
ですから、すべてを確認するためにこの質問をしたいと思います。それはエラーを作成していますか?

4

1 に答える 1

3

Objective C では、メモリ処理の概念は非常に単純です - オブジェクトの所有権。オブジェクトを割り当てる場合、つまり保持カウントを 1 増やす場合、そのカウントを減らすのは私の責任です。

ここでは、製品オブジェクトに新しいメモリを割り当てていないため、既存のメモリを参照しているだけです。したがって、それをリリースする必要はありません。

プールの自動解放とリリースについて詳しく知ることができます - http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html%23//apple_ref/doc/uid/10000011 -SW1およびhttps://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html

于 2012-05-08T11:15:33.433 に答える