1

もう 1 つ仮説的な質問があります。

関数を作成します:

-(IBAction)text:(id)sender{
    UITextView * textview = [[UITextView alloc]initWithFrame:CGRectZero];
}

私はARCを使用しているため、関数がスコープ外になるとオブジェクトが解放されると予想していました。しかし、Instrument を使用すると、メモリが解放されていないことがわかりました。

理由は誰にもわかりますか?

4

2 に答える 2

0

ARC は、textView が nil であるかどうかにかかわらず、自動解放/解放します


そうするために、すべてを @autoreleasepool にラップしてください!

-(IBAction)text:(id)sender{
   @autoreleasepool {
        UITextView * textview = [[UITextView alloc]initWithFrame:CGRectZero];
    }
}

textview を初めて使用するときの初期成長に関しては、cocoa touch テキスト システムが割り当てられます。(すべてのテキストビューが共有する基礎となる「エンジン」)

于 2013-02-01T08:51:54.053 に答える
-5

実際に解放したい場合は、これを試してください。

-(IBAction)text:(id)sender{
    UITextView * textview = [[UITextView alloc]initWithFrame:CGRectZero];
    textview = nil;
}

ARC はリリース コードを自動的に追加するだけで、他の言語のようなガベージ コレクターではありません。オブジェクトに nil を指定するとすぐに解放されます。それ以外の場合は、このオブジェクトが追加された「autoreleasepool」がフラッシュされるときに解放されます。(最後の点についてはよくわかりませんが)。

于 2013-02-01T08:33:39.457 に答える