2012-05-09 7 views
0

私は他人のコードを使っています。私は前にこのような何かに遭遇したことがありません:Return Statementオブジェクトの作成と解放

return [[[NSObject alloc] init] autorelease]; 

誰かがこの意味、なぜ誰かがそれを使用するものを私に言うことはできますか?ちょうど明確にするために、私はautorelease部分について尋ねていません。私はこのコードについて同じ質問をするでしょう:

-(id)someMethod 
{ 
lots of lines of code 
... 
return [[NSObject alloc]init]; 
} 
+0

簡単な答え:ARCを使用すると、これについてもう一度心配する必要はありません。 –

+3

それは間違っている、リチャード。 ARCでは、Objective-Cメモリ管理の仕組みを認識しておく必要がありますが、わかったらすぐに手作業を行う必要はありません。 –

+0

そのメソッドで 'nil'を返すと、エラーを通知するために予約されていて、成功のために何かを返すことを望んでいましたが、本当に気にしませんでした。いずれにせよ、悪いデザイン。 – Lvsti

答えて

0

便宜上、自動リリースされたオブジェクトを返すだけです。つまり、この機能を使用するときには、一般的にはautoreleaseメッセージを追加する必要はありません。特定のオブジェクトを常にオートリリースすることができます。

例として、Objective-Cのインクルードされた便利な( "factory")メソッドの多くは、自動解放されたオブジェクトを返します。あなたはおそらく[NSString stringWithFormat:__FORMAT__]に精通しており、オートレリースされたNSStringを返します。あなたがたりないかもしれないレスポンスを気にも同期URL要求、または以下のような機能を検討し、関数はオブジェクトを返すかもしれない理由の例としてhttp://memo.tv/archive/memory_management_with_objective_c_cocoa_iphone

を見てみましょう:

- (NSString *)modifyObject:(MyObject *)o { 
    o.mySettableProp = @"MODIFIED!"; 
    return [o description]; 
} 
+0

を新しく作成したオブジェクトを関数で返すのはなぜですか?このコード行は、長い行の関数の後にありますか? – Eric

+0

たとえば、同期URL要求は通常、URL応答オブジェクトを返します。あなたは反応を気にするかもしれないし、気にしないかもしれません(通常はそうしますが、暗闇の中でただ発射しているだけかもしれません)。だからあなたは '[request send]'か 'response = [request send]'のどちらかを行うことができます。 –

1

自動解放機能は、このオブジェクトをFUTUREにリリースすることを示しますが、まだアクセスする必要がないため、このオブジェクトを解放する必要はありません。リリースサイクルとメモリプールの解放により、自動解放はメモリ管理において非常に便利なツールです。 オートリリースの詳細については、http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447を参照してください。 ここにリンクがあります! What is the difference between releasing and autoreleasing? これが役に立ったと思っています。

1

オブジェクトが割り当てられ、初期化され、autorelease poolに追加されています。

引用アップルのドキュメント(上記のリンク):

自動解放プールは、あなたがオブジェクトに 「延期」のリリースメッセージを送ることができるメカニズムを提供します。これは、 オブジェクトの所有権を放棄したいが、 がメソッドからオブジェクトを返すときなど、即座にオブジェクトを解放する可能性を避けたい場合に便利です。通常は、自分自身の自動解放プール を作成する必要はありませんが、 のいずれかを行う必要があるか、そうすることが有益な状況があります。

TL、誰もがすぐにオブジェクトをretainなくなる場合DRは、それがrun loopの次の反復にリリースされます。

最初にNSObjectを割り当てる必要がある理由がわからないのは難しいです。私は、そのメソッドの使用例についてプロジェクトを検索し、次にオブジェクトがどうなるかを見ることをお勧めします。

関連する問題