2

@dynamic キーワードを使用して手動で記述したゲッター/セッターを持つプロパティの次のコードがあります。

@property (nonatomic, retain) NSObject* obj;

@dynamic obj;
-(NSObject*) obj
{
    return obj;
}
-(void) setObj:(NSObject*)newObj
{
    [obj release];
    obj = [newObj retain];
}

私の質問は、 @property 宣言から保持を削除すると、コンパイラはデフォルトが割り当てられ、それが私が望むものではない可能性があると不平を言うことです。保持を追加すると、ゲッター/セッターを自分で作成したため、無視されると思いますか?

これに関する簡単な確認を探しています。

4

2 に答える 2

3

あなたは正しいですが、少なくともこの場合、プロパティ宣言は実装と同じくらいドキュメント用です。ある時点で、誰か (あなたは 6 か月後ですか?) があなたの .h ファイルを見て、「なぜこの値が保持されないのですか? 実行されるたびにクラッシュしたり、ふるいのようにメモリをリークしたりしないのはなぜですか?」と言うでしょう。

于 2010-10-05T19:24:00.670 に答える
0

保持により、適用するまでオブジェクトをメモリに割り当てたままにすることができます

[obj release];

したがって、独自のセッターとゲッターを持っている場合でも、メモリ内の場所を保持するために保持を保持する必要があります。最終的にはその位置へのポインターしかないため、コンパイラーは別のオブジェクトを変更する可能性があることを通知する理由です。またはあなたのオブジェクトの代わりになるものは何でも。

そして、メモリを使い終わったら解放してメモリを解放することが重要です。

于 2010-10-05T19:14:13.157 に答える