私はXcode 4の初心者です。目的C NSAutoreleasePoolとリリース
最近私は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を作成する主なポイントであるかどうかはわかりません。
だから私はすべてのことを保証するためにこの質問をしたい。それはエラーを作りますか?
-
あなたはより多くの自動解放プールの上と中にリリースすることができます。そして、基本的にコード内の製品は、解放する必要のないポインタです。しかし、どのオブジェクトがコード内で自動解放されるかを特定することは非常に難しいことがわかりました。このような状況では、このような事態を防ぐ方法を検討します。このような状況を防ぐために、すべての関数でNSAutoreleaseプールを使用して、手動でリリースを呼び出したり、返されたすべてのオブジェクトでautoreleaseを使用したりすることはできませんか? –