web-dev-qa-db-ja.com

viewDidUnloadはios6で呼び出されなくなりました

Xcode/ios6の新しいバージョンをインストールしました。 viewDidUnloadは減価償却されます。

Apple doc、

viewDidUnload [...] iOS6.0では非推奨です。低メモリ状態でビューがパージされなくなったため、このメソッドが呼び出されることはありません。

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

- (void)viewDidUnload {
    [super viewDidUnload];

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

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

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

そして2番目のもの:
IBOutletプロパティをリリースするための新しい推奨方法は何ですか?デアロック方式では?

21
Martin

最初の質問の場合:

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

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

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

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

22
Pranav Jaiswal

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

@property (weak) IBOutlet UILabel * labelText;

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

9

2つ目:IBOutletプロパティをリリースするための新しい推奨方法は何ですか?デアロック方式では?

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

viewDidUnload(メモリ不足の場合にのみ呼び出されます)では、プロパティをnilに設定できますまた

1
user102008