0

私は他の誰かのコードに取り組んでいます。私は前にこのようなものに遭遇したことはありません:

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

誰かがこれが何を意味し、なぜ誰かがそれを使うのか教えてもらえますか? 明確にするために、私は自動解放部分について尋ねているわけではありません。このコードについて同じ質問があります。

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

3 に答える 3

1

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

于 2012-05-09T18:17:57.427 に答える
1

オブジェクトが割り当てられ、初期化されてから、自動解放プールに追加されています。

Apple のドキュメント (上記のリンク) を引用します。

自動解放プールは、オブジェクトに「遅延」解放メッセージを送信できるメカニズムを提供します。これは、オブジェクトの所有権を放棄したいが、すぐに割り当てが解除される可能性を避けたい場合 (メソッドからオブジェクトを返す場合など) に役立ちます。通常、独自の自動解放プールを作成する必要はありませんが、そうする必要がある、またはそうすることが有益な状況がいくつかあります。

TL;DR 誰もretainすぐにオブジェクトを取得しない場合、実行ループの次の繰り返しで解放されます。

そもそもなぜ誰かが NSObject を割り当てたいのか、詳細を知らずに判断するのは困難です。プロジェクトでそのメソッドの使用例を検索し、次にオブジェクトがどうなるかを確認することをお勧めします。

于 2012-05-09T18:20:19.653 に答える
0

便宜上、自動解放されたオブジェクトを返すだけです。autoreleaseこれは、関数を使用するときに、一般的に言えばメッセージを追加する必要がないことを意味します。特定のオブジェクトを常に自動解放したい場合があります。

例として、Objective-C に含まれる便利な (「ファクトリー」) メソッドの多くは、自動解放されたオブジェクトを返します。[NSString stringWithFormat:__FORMAT__]どれが autoreleased を返すかについては、おそらくよく知っているでしょうNSStringhttp://memo.tv/archive/memory_management_with_objective_c_cocoa_iphoneをご覧ください

関数がオブジェクトを返す理由の例として、応答を気にする場合と気にしない場合がある同期 URL 要求、または次のような関数を考えてみましょう。

- (NSString *)modifyObject:(MyObject *)o {
    o.mySettableProp = @"MODIFIED!";
    return [o description];
}
于 2012-05-09T18:15:29.730 に答える