2

私はARCを初めて使用します。私の問題はstrong、View Controllerでtypeプロパティを作成する場合、NavigationControllerpopViewControllerが発生したらそれをnilにする必要があるということです。

通常、これはで行いviewDidUnloadます。ただし、iOS6では非推奨になっています。

では、そのオブジェクトをどこで作成しますnilか?Appleはそれを行うように言っていますdidReceiveMemoryWarningが、ViewControllerをポップするたびにそのメソッドが呼び出されるわけではありません。

4

3 に答える 3

4

ご心配なく。プロパティはすべてnil、のObjective-Cランタイムによって自動的に設定されますdealloc。これは、View Controllerのアウトレットだけでなく、すべてのプロパティに当てはまります。

于 2013-03-26T16:03:48.950 に答える
1

strong参照されるオブジェクトの所有権を保持する場合は、プロパティを定義します。

私が理解できることから、おそらく弱いプロパティが必要です(オブジェクトが他の誰かによってリリースされた場合、それは必要なく、割り当てを解除できます)、または回避策として、viewDidDisappearメソッドでnilに設定できますが、JimPulsとして言った、あなたがコードを見るのを見ることなく、私のものはただ知識に基づいた推測です...

于 2013-03-26T16:15:40.163 に答える
0

同じ2つのViewController間でポップ/プッシュしている場合、UINavigationControllerのポインターは、割り当てが解除されない限り変更されません。それらがdeallocされた場合、それらのすべてもdeallocされるべきです。これらのViewControllerの新しいコピーを作成することになるかもしれませんが、古いコピーがすでに割り当て解除されている場合にのみ新しいコピーを作成するため、これは問題にはなりません。オブジェクトを保持できる唯一の方法は、View Controller(またはオブジェクト内のオブジェクト)が相互に参照している場合です。これにより、オブジェクトが保持されます。

との違いはstrong、手動でnilweakに設定する必要があるということではありません。strongむしろ、strong関係によってオブジェクトが保持されますが、保持されweakません。そのため、デリゲートは通常、weakその親(正確には親ではなく、デリゲートの対象となるオブジェクト)を保持したくないため、に設定されます。

于 2013-03-26T16:49:05.887 に答える