1
-(void)returnString
{
       NSString *str=[[NSString alloc]init];
       return [str autorelease];
}
-(void)getString
{
      NSString *p=[self returnString];
}

ここで、文字列 str の寿命は何ですか。strのretainCountがゼロになるのはいつですか。実行ループの最後に保持カウントがゼロになることはわかっています。runloop の終了とは、returnString を呼び出している関数の終了を意味しますか。そうでない場合、ランループが何を意味するのか、ランループの終わりが何を意味するのか。

-(void)returnString
{
      NSString *str=[[NSString alloc]init];
      return str;
}
-(void)getString
{
    NSString *p=[self returnString];
    [p release];
}

このタイプのリリースは正しいですか?

4

2 に答える 2

2

iOS でループを実行して、いくつかのイベントが発生するのを待ち、それに基づいて動作します。実行ループは、作業をスケジュールし、着信イベントの受信を調整するために使用するイベント処理ループです。実行ループの目的は、実行する作業があるときにスレッドをビジー状態に保ち、何もないときにスレッドをスリープ状態にすることです。

自動解放プールがイベント ループの開始時にのみ作成され、イベント ループの終了時にドレインされる場合は、メソッドで自動解放プールを作成する必要があります。

これをチェックして。実行ループの終了 -- プールの自動解放リカバリ

于 2011-05-30T12:12:31.130 に答える
1

autoreleaseオブジェクトを作成すると、自動解放プールに追加され、解放のキューに入れられます。自動解放プールが解放されると、プール内のすべてのオブジェクトにreleaseメッセージが送信され、メモリから解放されます。あなたの質問に答えるために、ある時点で保持されていないと仮定すると、オブジェクトはプールがある限りメモリ内に留まります。

詳細については、「メモリ管理プログラミング ガイド」の「自動解放プール」セクションを参照してください。

于 2011-05-30T05:53:15.927 に答える