0

iOS アプリで興味深いメモリ管理の問題が発生しています。

  1. プロパティを使用[self.propertyName release];すると、プロパティが 2 回解放され、iPad 1/iOS 4 デバイスで (プロパティの割り当て解除で) 不正なメモリ アクセス例外が発生するプロパティがあります。

  2. this コードを[_propertyName release];(プロパティではなくローカル変数にアクセスする) に変更すると、iPad 3/iOS 5 でリークが発生します。

もちろん、OS のバージョンを確認することでこれを防ぐことはできますが、何が間違っているのかを理解したいと思います。

詳細:

UIViewControllerプロパティは、プロパティを所有するオブジェクトと同様に、 のサブクラスです。UIViewプロパティをサブビューとして追加しています。これは良い習慣ではないと聞いたことがありますが、メモリの問題なしで別の場所で行っています。

テスト ケースは次のとおりです。

  • iPad 1、iOS 4.2 - ivar を使用してリリースする必要があります[_propertyName release]

  • iPad 2、iOS 5.0 - プロパティを使用してリリースする必要があります[self.propertyName release]

  • iPad 3、iOS 5.1 - プロパティを使用してリリースする必要があります[self.propertyName release]

4

1 に答える 1

0

別のviewControllerのビューをサブビューとして追加すると、奇妙な問題が発生する可能性があります。他のviewControllerを解放すると、そのビューはメインビューに保持されますが、viewControllerは消えます。

つまりself.propertyName = nil、プロパティを解放する最良の方法です。最初にメイン ビューからサブビューを削除してください。

于 2012-11-06T03:08:13.293 に答える