1

copyWithZoneに関するアップルのドキュメントを読みました:

「返されたオブジェクトは、それを解放する責任がある送信者によって暗黙的に保持されます」。

だから私がこれを書くと:

 - (id)copyWithZone:(NSZone *)zone {
        MyObject* obj = [[[[self class] allocWithZone:zone] init] autorelease];
        [obj fillTheObj];

        return obj;
    }

そして私は電話します:

MyStuff* obj = [varobj copy];

obj保持されますか?自動リリースを設定しない場合、保持カウントはどうなりますか?

4

1 に答える 1

3

メソッドで自動リリースしないでください。自動リリースしないと、copyWithZone所有できなくなります(おそらく、それを使用して何もできなくなります)。

自動リリースを削除すると、コピーobjで適切に保持されます。あなたがそれを終えたとき、あなたはMyStuff単にそれをする必要があります。release

Appleの判決は、送信者(つまり、MyStuff *obj初期化)が所有権を持っており、それを解放する必要があると言っています。「送信者」とは、メソッドではなく、メッセージを送信したオブジェクトを指します。copycopyWithZone

于 2011-01-08T11:11:06.947 に答える