電話帳の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がクリーンアップされていないと考えている理由です。メモリリークを発生させない、これを行うためのより良い方法はありますか?
Personクラスのコードを投稿することができれば、何が起こっているのかを簡単に診断できます。 – Mark