1

Objective-C でのメモリ処理を本当に理解しているとは言えないので、それに関していくつか質問があります。

  • 下のボックスのオブジェクト「url」と「urlRequest」を削除する必要がありますか、それとも「urlConnection」が責任を負いますか?

    NSURL* url = [NSURL URLWithString:url];
    NSURLRequest* urlRequest = [[NSURLRequest alloc] initWithURL:url];
    NSURLConnection* urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
    
  • 次のオブジェクト作成の違いは何ですか。refです。すべての場合にカウンタが保持されますか?

    [[NSString alloc] init];  
    [[NSString alloc] initWithFormat:...];  
    [NSString stringWithString:...];  
    
  • プロパティを割り当てるときは、ref です。属性として「代入」または「保持」が設定されているかどうかに関係なく、カウントは常に保持されますか?

4

1 に答える 1

1

一般的に言えば、alloc、new、または copy で始まるメソッドを通じてオブジェクトを取得すると、そのオブジェクトを解放する責任が発生します。したがって、最初のクエリでは、urlRequest と urlConnection を解放する必要があります。url オブジェクトは、静的ファクトリ メソッド (URLWithString) を使用してインスタンス化されるため、解放する必要のないオブジェクトの例です。

[[NSString alloc] init];

reatin count 1 で NSString を初期化します。

[[NSString alloc] initWithFormat:...];  

繰り返しますが、retain count が 1 の NSString になります。唯一の違いは、別の初期化子を呼び出したことです。

[NSString stringWithString:...];

現在のイベント ループ中に有効であり続けることが保証されている、自動解放された NSString を作成します。

プロパティ属性に関しては、割り当てはセッターに渡されたオブジェクトを保持しません。

私はそれが少し無味乾燥であることを知っていますが、メモリ管理ガイドラインは、このタイプの質問の本当に良いリファレンスです.

于 2010-03-02T09:02:12.053 に答える