私はこれをしなかった場合リリースされたオブジェクトを再度割り当てても構いませんか?
Object * myObject = [[Object alloc]init];
[myObject release];
は再び次の行に
myObject = [[Object alloc]init];
を私のオブジェクトの割り当てについて何か問題があるのでしょうか?
私はこれをしなかった場合リリースされたオブジェクトを再度割り当てても構いませんか?
Object * myObject = [[Object alloc]init];
[myObject release];
は再び次の行に
myObject = [[Object alloc]init];
を私のオブジェクトの割り当てについて何か問題があるのでしょうか?
まったく問題ありません。 [myobject release];
は、myObject
が指すオブジェクトを解放します。
その後、myobject = [[Object alloc] init]
は、別のオブジェクトにmyobject
ポイントを行います。
もちろんです。このテクニックは、ローカルオブジェクトのメソッド変数で特に便利です。ここでは、一度宣言されたオブジェクトを新しいオブジェクトとして再割り当てすることで再利用できます。
これは安全です。
その理由は、myObject
はではなく、オブジェクトです。オブジェクトへの参照(または正確にしたい場合はポインタ)です。つまり、2つの完全に独立したオブジェクトがあることを意味しますが、最初のオブジェクトへの参照を忘れてしまいます。
何も問題はありません。これは、あなたが最初のオブジェクトを漏らさないようにする方法です。
ただし、解放されたオブジェクトを技術的に割り当てているわけではありません。もう一度古いポインタを使用しています。
Object * myObject = [[Object alloc]init];
myObject = [[Object alloc]init];
あなたが作成した最初のオブジェクトがリークします。
私がBig Nerd Ranchの本で教えた最初の方法でした。 –
重要なメモリを解放するのを忘れてしまった場合は、[[[オブジェクトalloc] init] autorelease]を使うことができます。 – Abhinav
それも、あなたは、このような各オブジェクトポインタのためのスタック空間を必要とする myobject1 =のallocのinit myobject2 =のalloc initを を行う場合には、スタック上の複数のオブジェクトのインスタンスを持つ必要がなくなります – Abhinav