2009-08-26 5 views
2

電話帳のiPhoneアプリケーションでコードをクリーンアップしています。InstrumentsのLeaksツールでNSCFStringオブジェクトが漏洩していると報告されています。私はNSStringのメンバーと最初の名前のための関連するプロパティのローカル以外の何物でも、最後の名前を持っていない私のアプリケーションでのPersonクラスを持っているObjective C NSCFString NSMutableArraysでのリーク

などが

私のビューコントローラがあります。ここで私は、次の午前パターンがありますsearchBarSearchButtonClickedイベントのSQLiteデータベースから取り込まれたNSMutableArrayプロパティ。このNSMutableArrayには、私のテーブルビューコントロールを設定するために使用されるPersonオブジェクトが設定されています。また、ユーザーがビュー内の人物をクリックすると、そのPersonオブジェクトが詳細ビューに渡され、名前だけでなく追加情報が表示されます。

初めてルックアップして結果を表示すると、メモリリークは発生しません。

私が2回目のルックアップを実行するとき、私は理想的にはNSMutableArrayをクリアし、メモリをリークすることなく新しい結果セットでリロードするのが理想的です。だから、これを行うために、私は以下に示すようにpersonList NSMutableArrayのを再作成するためにデータベースを呼び出し、その後、私のpersonList性質上removeAllObjectsを呼び出して:

[self.personList removeAllObjects]; 
self.personList = [SearchService GetPersonList:searchText]; 
[list reloadData]; 

removeAllObjectを呼び出すことによって、私は私が持っていたの漏れを取り除く得ていますPersonオブジェクトに関連付けられていました。しかし、私は現在、個々のPersonオブジェクトのプロパティから残ったNSStringオブジェクトをリークしているようです。

これは可能ですか?

私はInstrumentsツールを初めて使用しましたが、NCSFStringリークの1つにドリルするときに、拡張の詳細からわかるものは、スタック内の最後のコード行が@synthesizeコード行を指していることが多い

@synthesize firstName; 

したがって、私はそれらのNSStringsがクリーンアップされていないと考えている理由です。メモリリークを発生させない、これを行うためのより良い方法はありますか?

+0

Personクラスのコードを投稿することができれば、何が起こっているのかを簡単に診断できます。 – Mark

答えて

3

PersonクラスのdeallocメソッドでNSStringをリリースしていますか?

そんなにとしてあなたの財産を設定すると仮定すると:あなたがセッターを使用してfirstNameを設定すると

@property (retain) NSString *firstName; 

、それは保持されます。 Personインスタンスが解放されて割り当てが解除されたが、firstNameが解放されていない場合はリークします。

あなたPersonクラスのdealloc方法でそれを入れてください:

- (void)dealloc 
{ 
    [firstName release]; 
    [super dealloc]; 
} 

(あなたfirstNameプロパティがfirstNameと呼ばれるために使用され、対応するIVARを仮定)。

+0

これは動作するようです。しかし、XCode 3.2.1のコードアナライザは、deallocメソッドの私のリリースについてコメントしています。「オブジェクトの参照カウントの不正確な減少は、この時点で呼び出し元によって所有されていません。アイデア? – rtemp

+0

コードアナライザは '-dealloc'のアクセサメソッドをバグとみなし、これを警告します。' init'と 'dealloc'でアクセサーを使用するのが有効かどうか議論されていますが、一般的なコンセンサスは、クリアしてivarsに直接アクセスしてください(申し訳ありませんが、前にそれを指摘しておくべきでした)。 –

+0

これは私のために働いていましたが、私のプロパティの設定は次のとおりです:@property(nonatomic、assign)NSString * name; –

関連する問題