2

こんな機能があれば

void setSomeObject( SomeObjectClass obj /*, and some other params*/ )
{
  [_previous autorelease];
  _previous = obj;
}

私が理解している限り、autorelease メッセージはオブジェクト自体 (_previous ではない) に送信されるため、ある時点で setSomeObject がスコープ外になると、元のオブジェクトが (存在する場合) 自動解放されます。これは正しいです?私はプロパティを使用していませんが、プロパティを使用すると、self.previous = obj;を実行すると、以前のオブジェクトの解放が自動的に行われると思います。?

4

2 に答える 2

1

-autoreleaseオブジェクトにメッセージを送信すると、そのメッセージはアクティブNSAutoreleasePoolに追加され、実行ループの実行時に空になります。と言うと[_previous autorelease]、そのオブジェクトのみが自動解放され、次にと言うと_previous = obj、変数の参照のみが変更されます。古いオブジェクトは引き続き自動解放されます。

セッターメソッドでこれを行う場合、これは一般的なパターンです。

- (void)setSomeObject:(MyObjClass *obj) {
    if (obj != someObject) {
        [someObject release];
        someObject = [obj retain]; // or copy, depending on what you want
    }
}
于 2010-06-29T01:27:00.580 に答える
0

いいえ、それは正しくありません。

[_previousautorelease]は自動リリースメッセージを_previousに送信します。これがこの構文の意味です。

于 2010-06-29T01:26:49.020 に答える