私の質問はばかげているように聞こえるかもしれませんが、自動解放されたオブジェクトを自動解放としてマークするとどうなるか知りたいです。2回リリースされますか?または何も起こりませんか?例えば:
Obj * obj = [[Obj create] autorelease];
[Obj create]
自動解放されたオブジェクトを返すとしましょう。
別の自動リリースを追加すると、どうなりますか?
私の質問はばかげているように聞こえるかもしれませんが、自動解放されたオブジェクトを自動解放としてマークするとどうなるか知りたいです。2回リリースされますか?または何も起こりませんか?例えば:
Obj * obj = [[Obj create] autorelease];
[Obj create]
自動解放されたオブジェクトを返すとしましょう。
別の自動リリースを追加すると、どうなりますか?
はい、2 回送信autorelease
すると、オブジェクトが 2 回解放されます。create
メソッドが自動解放されたオブジェクトを返し、それに別のメッセージを送信するautorelease
と、割り当てが解除されたオブジェクトが解放されるため、アプリがクラッシュします。
そうは言っても、新しい自動参照カウント (ARC)を使用してみませんか? オブジェクトの (自動) 解放について心配する必要はもうありません。
Class Method(+) を使用しているため、メモリを気にする必要はありません。人々がクラス メソッドを使用する理由の 1 つは、autorelease オブジェクトを返すことができることです。クラス メソッドが返すオブジェクトを解放または自動解放すると、クラッシュします。