1

私は〜6KBをリークするこのメソッドを持っています:

+ (EInspectorFacilityInfo*) newWithNode: (CXMLNode*) node
{
  if(node == nil) { return nil; }
  return (EInspectorFacilityInfo*)[[[EInspectorFacilityInfo alloc] initWithNode: node] autorelease];
}

これは、計測器のメモリ リークを示すスクリーンショットです。 ここに画像の説明を入力

どうすればこのメモリリークを取り除くことができますか?

4

2 に答える 2

7

メソッドには「new」という単語が含まれているため、Objective-C の規則により、オブジェクトへの所有参照を返すことが期待されます。保持カウントが 1 のオブジェクト。オブジェクトを自動解放すると、保持カウントが 0 のオブジェクトが返されます。

メソッド名から new という単語を削除するか、オブジェクトを自動解放しないようにする必要があります。この場合、呼び出し元が解放する責任があります。

于 2012-06-09T10:44:24.237 に答える
1

Jasarienの回答に少し追加すると、メソッドに次のような名前を付ける必要があります。

+ (EInspectorFacilityInfo*) inspectorFacilityInfoWithNode: (CXMLNode*) node

これにより、問題が解決され、Cocoa のコーディング スタイルと精神が一致します。

于 2012-06-09T18:52:00.237 に答える