もう 1 つ仮説的な質問があります。
関数を作成します:
-(IBAction)text:(id)sender{
UITextView * textview = [[UITextView alloc]initWithFrame:CGRectZero];
}
私はARCを使用しているため、関数がスコープ外になるとオブジェクトが解放されると予想していました。しかし、Instrument を使用すると、メモリが解放されていないことがわかりました。
理由は誰にもわかりますか?
もう 1 つ仮説的な質問があります。
関数を作成します:
-(IBAction)text:(id)sender{
UITextView * textview = [[UITextView alloc]initWithFrame:CGRectZero];
}
私はARCを使用しているため、関数がスコープ外になるとオブジェクトが解放されると予想していました。しかし、Instrument を使用すると、メモリが解放されていないことがわかりました。
理由は誰にもわかりますか?
ARC は、textView が nil であるかどうかにかかわらず、自動解放/解放します
そうするために、すべてを @autoreleasepool にラップしてください!
-(IBAction)text:(id)sender{
@autoreleasepool {
UITextView * textview = [[UITextView alloc]initWithFrame:CGRectZero];
}
}
textview を初めて使用するときの初期成長に関しては、cocoa touch テキスト システムが割り当てられます。(すべてのテキストビューが共有する基礎となる「エンジン」)
実際に解放したい場合は、これを試してください。
-(IBAction)text:(id)sender{
UITextView * textview = [[UITextView alloc]initWithFrame:CGRectZero];
textview = nil;
}
ARC はリリース コードを自動的に追加するだけで、他の言語のようなガベージ コレクターではありません。オブジェクトに nil を指定するとすぐに解放されます。それ以外の場合は、このオブジェクトが追加された「autoreleasepool」がフラッシュされるときに解放されます。(最後の点についてはよくわかりませんが)。