1

私はこの保持されたプロパティを次のように宣言しています:

@property (nonatomic, retain) NSMutableDictionary *codes;

それから私はこれを合成します:

@synthesize codes;

私はこのようなプロパティを使用します:

self.codes = [NSMutableDictionary dictionary];

[codes release];それから、私は私ので言うのを忘れdeallocます。

XCode 4.3.2でAnalyzerを実行すると、これは問題として表示されません。私のベースSDKはiOS5.1で、コンパイラはAppleLLVMコンパイラ3.1です。

なぜアナライザーはこれを検出しないのですか?

4

2 に答える 2

1

アナライザーがメソッド/ライブラリの境界を越えて保持/解放の問題を確実に検出できないためだと思います。

配列の所有権を外部のメソッドまたはライブラリに渡しcodesて、後で解放することも考えられます。受信メソッドは必要に応じてそれを保持する必要があるため、これは悪い習慣ですが、私はこの種のことを経験の浅い開発者が行っているのを見てきました。

だからあなたはどこかのあなたのクラスでこれを見るかもしれません:

[SomeAPI takeThisArrayAndReleaseItLater:codes];

アナライザーには、クラスが配列の解放を担当しなくなったことを知る方法がありません。あなたが良いメモリ管理の慣行に従っていないという事実にもかかわらず、あなたに警告を与えることは間違っているでしょう。

アナライザーは、実際の問題に関する警告のみに非常に優れています。ベータビルド以外で誤検知が発生したことはないと思います。これは良いことです。

于 2012-06-08T07:59:19.140 に答える
0

構成から何も変更していない場合は、ios5 +をターゲットにするたびに、解放または保持する必要のないARC(自動参照カウント)が自動的に使用されます。

iOS 5での最も破壊的な変更は、自動参照カウント(略してARC)の追加です。ARCは新しいLLVM3.0コンパイラの機能であり、すべてのiOS開発者が嫌う手動のメモリ管理を完全に排除します。

これは、iOSチュートリアルチームのメンバーであり、経験豊富なiOS開発者およびデザイナーであるMatthijsHollemansによる投稿です。

于 2012-06-08T07:40:39.363 に答える