このコードがARCの下でリークするとは思わないので、質問者がARCではなく手動のメモリ管理を使用していると想定しても安全だと思います。
そうは言っても、ミドゥン議員の答えは正しいです。当面の問題を解決するには、返されたオブジェクトを自動解放する必要があります。しかし、なぜこれがプロファイリング ツールによってリークと見なされるのかについて、いくつかの情報を追加したいと思いました。
Objective-C は、メソッドの命名規則を使用して、メソッドのメモリ管理セマンティクスを確認します。たとえば、という名前のメソッドnewPerson
は、オブジェクト (保持カウントが +1 のオブジェクト) への所有参照を返すことが期待されます。という名前のメソッドperson
は、自動解放されたオブジェクト (つまり、所有参照のないオブジェクト) を返すことが期待されます。
最初のケースでは、メソッドの呼び出し元がオブジェクトを所有し、終了時にそれを解放することが期待されます。2 番目のケースは、呼び出し元がオブジェクトの解放について心配する必要がないことを示しています (オブジェクトは所有されていないため)。
規則を覚えるために私が好んで使用する簡単な方法は、CARN ルールとして学んだことです。
これらの単語を含むすべてのメソッドは、Cbjective-C では、返されたオブジェクトへの所有参照を返すことが期待されます。
結論として、所有しているオブジェクトをメソッドから返す場合は、その名前を修正して上記の単語のいずれかを含めるか、そうでない場合は、返されたオブジェクトを自動解放します。