私は現在、ARCで構築されていないレガシーアプリでのiOS 7の表示の問題の修正に取り組んでおり、dealloc
iOSバージョン6と7の間の方法で一貫性のない動作に遭遇しました。これらについての他の言及は見つかりませんドキュメンテーションまたはコミュニティの議論の変更なので、ここで何が起こっているのかを明らかにできる人はいますか?
私の以前のコード(iOS6で動作するものは次のようになります):
@interface MyViewController()
@property (retain) AdHandler *adHandler;
@end
@implementation MyViewController
@synthesize adHandler = _adHandler;
- (id) initWithAdHandler:(AdHandler*)anAdHandler
{
self = [super init];
_adHandler = [anAdHandler retain];
return self;
}
- (void)dealloc
{
[super dealloc];
[_adHandler release];
_adHandler = nil;
}
...
@end
iOS 6 のコードをステップ実行すると、dealloc
ステートメントの後、[_adHandler retainCount]
まだ肯定的であり、オブジェクトがまだ利用可能であることがわかりました。
ただし、iOS 7 では、dealloc
ステートメントの後、何らかの理由でretainCount
ゼロになり、_adHandler
オブジェクトがdealloc
'd になったため、 への呼び出しで.release
EXC_BAD_ACCESS
[adHandler release]
通話を通話の前に移動するだけでこれを修正できますdealloc
が、私の質問はなぜこれが起こっているのですか? dealloc
責任のないオブジェクトを解放するのはなぜですか? dealloc の動作がこのように変更された理由に関するドキュメントはどこかにありますか?