2011-11-07 5 views

答えて

4

まったく問題ありません。 [myobject release];は、myObjectが指すオブジェクトを解放します。

その後、myobject = [[Object alloc] init] は、別のオブジェクトにmyobjectポイントを行います。

+0

それも、あなたは、このような各オブジェクトポインタのためのスタック空間を必要とする myobject1 =のallocのinit myobject2 =のalloc initを を行う場合には、スタック上の複数のオブジェクトのインスタンスを持つ必要がなくなります – Abhinav

1

もちろんです。このテクニックは、ローカルオブジェクトのメソッド変数で特に便利です。ここでは、一度宣言されたオブジェクトを新しいオブジェクトとして再割り当てすることで再利用できます。

5

これは安全です。

その理由は、myObjectではなく、オブジェクトです。オブジェクトへの参照(または正確にしたい場合はポインタ)です。つまり、2つの完全に独立したオブジェクトがあることを意味しますが、最初のオブジェクトへの参照を忘れてしまいます。

2

何も問題はありません。これは、あなたが最初のオブジェクトを漏らさないようにする方法です。

ただし、解放されたオブジェクトを技術的に割り当てているわけではありません。もう一度古いポインタを使用しています。

Object * myObject = [[Object alloc]init]; 
myObject = [[Object alloc]init]; 

あなたが作成した最初のオブジェクトがリークします。

+0

私がBig Nerd Ranchの本で教えた最初の方法でした。 –

+0

重要なメモリを解放するのを忘れてしまった場合は、[[[オブジェクトalloc] init] autorelease]を使うことができます。 – Abhinav

関連する問題