UIButton *btn = [[UIButton alloc]init];
にメモリを解放する、私はBTN解放する必要があります。は、上記のコードでは、IOS
第2のタイプでは、btnをリリースする必要がありますか、またはリリース自体を呼び出す必要はありません。
2番目のタイプでbtnをリリースするにはどうすればよいですか?
UIButton *btn = [[UIButton alloc]init];
にメモリを解放する、私はBTN解放する必要があります。は、上記のコードでは、IOS
第2のタイプでは、btnをリリースする必要がありますか、またはリリース自体を呼び出す必要はありません。
2番目のタイプでbtnをリリースするにはどうすればよいですか?
オブジェクトがオートリリースされているかどうかを考えないでください。実際には、便利メソッドから返された多くのオブジェクトはオートレリースされていません。例えば、静的インスタンスである可能性があります。
代わりに、がのオブジェクトかどうかを考えてください。名前—または明示的にこれらはあなた自身の返されたオブジェクト、そしてあなたがrelease
とあなたの所有権を放棄しなければならないということを意味するものでretain
—での所有権を取得したオブジェクトのためにalloc
、new
、またはcopy
を持つメソッドの場合。あなたが所有していないオブジェクトの場合は、release
は必要ありません。
メモリ管理のrulesは、非常にです。記憶に残すと、このような質問に対する答えは第二の性質になります。
2番目の型では、自動解放オブジェクトを返すので、解放することを心配する必要はありません。
2番目の例でボタンを放す必要はありません。 [UIButton buttonWithType:]
は、自動解放されたオブジェクトを返します。
単純なルールがあります:あなたはrelease
に必要な場合にのみ、あなたalloc
、retain
、copy
またはmutableCopy
。
Appleは、オブジェクトがオートレリースされているかどうかについては、オブジェクトを所有しているかどうかだけ考えるのは有益ではないと述べています。私が自分の答えで述べたように、多くの便利なメソッドはオートレリースされたオブジェクトを返さないが、あなたが所有していないオブジェクトです。 – dreamlax
[このPDF](http://www.apple.com.cn/developer/iphone/library/documentation/UserExperience/Conceptual/MemoryMgmt/MemoryMgmt.pdf)の14ページの上部を参照してください。 – dreamlax
最初のケース:
あなたはそれを所有しているので、それを解放する必要があります。あなたがオブジェクトを作成すると
第二ケース:あなたが受け取る
ボタンは、コンビニエンスコンストラクタから取得されます。
"コンプリートコンストラクタ"は、自動解放メッセージが送信されるオブジェクトを作成します。
したがって、2番目のケースでボタンを放すべきではありません。 retainメソッドを送信した場合にのみ、リリースメッセージを送信できます。
この質問に必ずしも真実ではなく、関連性のない多くの実装の詳細について議論しています。新しい自動解放プールが手動で作成された場合(タイトループでメモリを管理する目的で)、自動解放プールが現在のイベントループの終了前より早く消耗する可能性があります。オブジェクトがリリースされるときは気にしないでください。オブジェクトを所有しているかどうかについては、代わりに考える必要があります。 – dreamlax
ボタンを離す必要はありません。自動的に自動解除型を返します。そして、あなたが所有しているとき(allocやnewやcopyのように)オブジェクトを解放する必要があるだけです。
ありがとうございますdreamlax – raghul
なぜdownvote? – dreamlax