私が取り組んでいる、ARC
iOS 4.3 および iOS 5 を使用し、サポートする必要があるアプリケーションは、ファイル内で everyoutlet
を宣言します。@property (strong, nonatomic) IBOutlet
.h
例えば
// myClass.h
@property (strong, nonatomic) IBOutlet UITextView *myTextview;
オブジェクトへの参照を保持していないARC
プロパティのみが解放されることを知っています。その結果、アプリは に依存してプロパティをに設定します。strong
- (void)viewDidUnload
myTextview
nil
すなわち
// myClass.m
- (void)viewDidUnload
{
[super viewDidUnload];
self.myTextview = nil;
}
Apple のドキュメンテーションから、それOutlets
は通常、ファイルの所有者 (つまり、iOS ストーリーボード シーンのコンテンツを所有する A) から(私の経験則では、ファイルの所有者、ファーストレスポンダーでウィンドウに表示されるものをすべて使用することです) をweak
除く必要があります。および表示)。Runtime Object
Top-Level Objects
に追加するものはすべて にview
なるため、それsubview
はです。つまり、参照を使用する必要があります。retained
direct superview
weak
- (void)viewDidUnload
また、iOS 6 で廃止され、呼び出されないことも認識しています。
第 1 の質問: すべてのアウトレットをstrong
プロパティとして宣言し、それをnil
inに設定するというアプローチを取ることの問題は何ですか? iOS 6 で廃止されviewDidUnload
たという事実は別として?viewDidUnload
が呼び出されるnil
前にへのポインターを設定できる状況が発生するためだと直感的にわかります。viewDidUnload
したがって、ヒープ上のメモリを解放する必要があります。この場合、顕著なパフォーマンスの変化はありますか?
2 番目の質問: プロジェクト全体に戻って、に変更strong
する必要がありweak
ますか? なんで?時間をかける価値はありますか?
3番目の質問property
:を aで宣言しclass extension
て「隠す」場合、 or をいつ使用するかを決定するための経験則にどのように影響しますstrong
かweak
。
ここには、この問題について話し合うスレッドがたくさんあることを知っています。しかし、私が見つけた多くは時代遅れであり、この問題に直接対処していません。ありがとう。