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