宣言されたプロパティがアクセサメソッドを生成することは知っていますが、これはどういうわけか単なる構文糖衣です。
self.property = nil
多くの人が彼らのdealloc
方法で使用していることがわかりました。
1) Apple のメモリ管理ドキュメント、p23 には次のように書かれています。
アクセサー メソッドを使用してインスタンス変数を設定してはならない唯一の場所は、init メソッドと dealloc です。
なぜすべきではないのですか?
2) Apple のObjective-C 2.0 では、p74
宣言されたプロパティは、基本的にアクセサ メソッドの宣言に取って代わります。プロパティを合成すると、コンパイラは存在しないアクセサー メソッドのみを作成します。メソッドとの直接的なやり取りはあり
dealloc
ません。プロパティは自動的に解放されません。ただし、宣言されたプロパティは、メソッドの実装をクロスチェックする便利な方法を提供dealloc
します。ヘッダー ファイル内のすべてのプロパティ宣言を検索し、マークされていないオブジェクト プロパティassign
が解放され、 マークされているオブジェクト プロパティが解放されていないことを確認できますassign
。注: 通常、メソッドでは、次の例に示すように、(set アクセサーを呼び出してパラメーターとして渡すのではなく) インスタンス変数を直接オブジェクト
dealloc
化する必要があります。release
nil
- (void)dealloc { [property release]; [super dealloc]; }
ただし、最新のランタイムを使用してインスタンス変数を合成している場合は、インスタンス変数に直接アクセスできないため、アクセサー メソッドを呼び出す必要があります。
- (void)dealloc { [self setProperty:nil]; [super dealloc]; }
メモの意味は?
私は見つけ[property release];
て、[self setProperty:nil];
両方とも動作します。