2011-01-08 9 views
1

私はcopyWithZoneについてアップルのドキュメントでお読みください。copyWithZone戻り値の所有権と保持カウント

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

私はこれ書いた場合:

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

     return obj; 
    } 

をし、私が呼ぶ:

MyStuff* obj = [varobj copy]; 

obj保持されますか?自動解除を設定しないと、保持カウントはどうなりますか?

答えて

3

あなたのcopyWithZoneメソッドでそれを自動解除しないでください。それを所有していない(おそらく何もすることはできません)。

自動解除を削除し、objは、MyStuffコピーに適切に保持されます。あなたが完了したら、それはreleaseにする必要があります。

Appleの文章では、送信者(あなたのMyStuff *objの初期設定です)に所有権があり、それをリリースする必要があると言われています。 「送信者」とは、がメソッドではなくcopyメッセージを送信したメッセージを示すオブジェクトを指します。

+0

@Matthew Frederick:大丈夫ですので、Appleの文書によれば、IMPLICITの保持はありません。それはあなたのコードのために明白なものですか? – Oliver

+0

私の編集したバージョンを読む。送信者はコピーを実行しているので、暗黙的にコピーを保持します。これは私にとってはかなり明白ですが、「保持」という言葉はどこにも使われていません。 –

+0

@Matthew Frederick:OK、どうすれば自動解除を削除できますか?コールの中には保持があり、コールの外に暗黙のものがありますか?言い換えれば、ここでIMPLICITとは何ですか?私は明示的なものしか見ることができない、または2つの保持がある。 – Oliver

関連する問題