1

私はすぐにメモリリークを探している大規模なプロジェクトを調べていましたが@property (nonatomic, retain)、に対応するものがないことに気づきreleaseましたdealloc。おっと、クイックフィックスだと思います。

後でクラッシュした後、よく見るとsetFooメソッドがオーバーライドされ、値は保持されていますが、ivarによっては保持されていません。この質問のために、NSDictionaryに入れられていると仮定します。

(OK、仮定したくない場合-設定値は実際にはcocos2dのCCSpriteでありsetNormalSprite、子として追加されているため、保持されますが、単にivarに割り当てられます:

 - (void)setNormalSprite:(CCSprite *)sprite 
  {
    if (normalSprite) {
        [self removeChild:normalSprite cleanup:YES];
        normalSprite = nil;
    }

    normalSprite = sprite;
    [self addChild:normalSprite];

    (...omitted...)
   }

)。

セッターが保持カウントを増加させるが、関連付けられているivarが保持されているためではない値の正しいキーワードは何ですか?

4

2 に答える 2

1

ARCを使用しておらず、setterメソッドを明示的に記述している場合は、使用する所有権属性は関係ありません。所有権属性は、コンパイラーがセッターまたは(ARCでは)ivarを生成する場合にのみ重要です。

オブジェクトがプロパティ値の所有権を取得することを示すドキュメントとしてretain属性を使用できますが、実際に何らかの方法で保持するかどうかはユーザー次第です。

于 2012-10-07T00:50:16.137 に答える
1

retain(またはARCの世界では)オブジェクトを保持する別のコレクションにオブジェクトをstrong追加しているので、あなたの場合は正しいです。CSSprite

オブジェクトを格納するために実際にインスタンス変数を使用していない場合は、もに設定する必要@propertyがあります。@dynamic@implementation

于 2012-10-06T23:38:29.683 に答える