電話帳のiPhoneアプリケーションでコードをクリーンアップしていますが、InstrumentsのリークツールからNSCFStringオブジェクトがリークしていると報告されています。これが私がフォローしているパターンです:
アプリケーションにPersonクラスがあり、ローカルNSStringメンバーと、名前、名前などの関連プロパティしかありません。
私のビューコントローラーには、searchBarSearchButtonClickedイベントでSQLiteデータベースから入力されるNSMutableArrayプロパティがあります。このNSMutableArrayには、テーブルビューコントロールに入力するために使用されるPersonオブジェクトが入力されます。また、ユーザーがビュー内の人物をクリックすると、その人物オブジェクトが詳細ビューに渡され、名前だけでなく追加情報が表示されます。
最初のルックアップを実行して結果を表示するとき、メモリリークはありません。
ここで、2回目のルックアップを実行するときに、理想的にはNSMutableArrayをクリアして、メモリリークなしで新しい結果セットをリロードしたいと思います。したがって、これを行うには、personListプロパティでremoveAllObjectsを呼び出してから、データベースを呼び出して、以下に示すようにpersonListNSMutableArrayを再設定します。
[self.personList removeAllObjects];
self.personList = [SearchService GetPersonList:searchText];
[list reloadData];
removeAllObjectを呼び出すことにより、Personオブジェクトに関連付けられていた以前のリークを取り除きました。ただし、現在、個々のPersonオブジェクトのプロパティから残っているNSStringオブジェクトをリークしているようです。
これは可能ですか?
私はInstrumentsツールを初めて使用しますが、NCSFStringリークの1つにドリルダウンしたときに拡張詳細からわかることは、スタック内のコードの最後の行が、プロパティの@synthesizeコード行を指していることが多いということです。なので:
@synthesize firstName;
したがって、これらのNSStringがクリーンアップされていないと思うのはそのためです。メモリリークを発生させない、これを行うためのより良い方法はありますか?