21

Xcode/ios6 の新しいバージョンをインストールしました。viewDidUnload は廃止されました。

アップルドキュメントでは、

viewDidUnload [...] iOS 6.0 で廃止されました。メモリ不足の状態でビューがパージされなくなったため、このメソッドが呼び出されることはありません。

しかし、多くのアプリがこのコールバックを使用して、次のようにプロパティを解放しています。

- (void)viewDidUnload {
    [super viewDidUnload];

    self.recipientButton = nil;
    self.connectButton = nil;
    self.infoLabel = nil;
}

これは、IBOutlets をリリースするためのベスト プラクティスでした。

では、最初の質問:
iOS 6 でこれらの既存のアプリはどうなるでしょうか? 彼らは漏れますか?

2 つ目:
IBOutlet プロパティを解放するための新しい推奨方法は何ですか? 解放方法では?

4

3 に答える 3

22

最初の質問:

ViewController は didReceiveMemoryWarning メソッドのコールバックを受け取り、このメソッドでビューとその他のコンポーネントを無効にすることができます

参考までに、EVOLUTION OF VIEW CONTROLLER の WWDC 2012 ビデオ セッションを確認してください (登録済みの開発者のみが利用できると思いますが、確かではありません)。

2番目のものに答えてください。

[オブジェクトリリース]; 解放中。解放する前にオブジェクトに nil を割り当てる必要はありません。

于 2012-09-20T09:05:09.240 に答える
9

IBOutlets のような弱いプロパティを使用することをお勧めします

@property (weak) IBOutlet UILabel * labelText;

そうすれば、dealloc で何もする必要はありません。iOS 6 では単に ViewDidUnload が呼び出されず、iOS5 以前ではメモリ警告が発生したときに呼び出されるだけです。

于 2012-09-20T18:45:43.987 に答える
1

2 つ目: IBOutlet プロパティを解放するための新しい推奨方法は何ですか? 解放方法では?

「古い」推奨方法は何ですか?で保持されているインスタンス変数を常に解放する必要がありますdealloc。それは常にこのようであり、この方法であり続けています。

viewDidUnload(メモリが少ない場合にのみ呼び出されます)、プロパティを に設定することnilできました。

于 2012-10-30T23:33:18.960 に答える