2011-08-02 4 views
2

は、私が原因のようにプロパティを設定する可能性のあるメモリリークの警告を取得しています:iOS:自己のメモリリークを引き起こしていますか? XCodeの4アナライザを使用して

self.newDog.dogName = self.dogNameTextField.text; 

特定の警告は、次のとおりです。

  1. プロパティObjective-を返します。 +1保持カウント(所有参照)を持つCオブジェクト。ライン513上に割り当て

  2. オブジェクトは、後で実行パスで参照されていないと私は自己を使用してプロパティを設定しない場合は+1(オブジェクトがリークした)

のカウントを保持しており、警告離れて行く...しかし、私は、私は基本的に読んだすべてがプロパティを取得/設定するときは、常に自己を使用すると言うので、それは他の問題が発生することはありませんかはわからない:

newDog.dogName = self.dogNameTextField.text; 

私は間違って何かをやっていますここに?ここで警告が発生したビューコントローラからいくつかのストリップダウンコードは次のとおりです。

@interface AddDogViewController : UITableViewController { 
    Dog *newDog; 
} 

@property (nonatomic, retain) Dog *newDog; 




@implementation AddDogViewController 

@synthesize newDog; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    // some other code 

    self.newDog.dogName = self.dogNameTextField.text; 

    // some other code 
} 


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

@end 

答えて

8

メモリ管理ルールによれば、newで始まるメソッドは+1保持カウントを返します(allocおよびcopyのように)。あなたのアクセサリーnewDogにそのような名前があります。

プロパティの名前を、newで始まらないものに変更する必要があります。ここで実際には何も漏れていないことに注意してください。命名規則に違反しているので、アナライザを混乱させるだけです。

+1

それはそれを説明します。名前を別のものに変更すると... ...ありがとう! –

2

あなたがself.myIvarをやって、あなたのivarにアクセスしたとき、あなたはそうするsynthesizedsetter方法を使用して、したがって、それがあった場合されているためですretainと宣言された場合は、retain msgを追加して送信します。

これは、プライベート変数に直接アクセスする場合、つまりself.myIvarを使用しないセッターを使用しない場合は発生しません。

+0

これは本当ですが、問題ではありません。このアナライザは、セッタの動作を認識しています。問題は、このプロパティがアナライザを混乱させるように誤って命名されていることです。 –

関連する問題