ナビゲーションコントローラベースのアプリケーションがあり、ビューコントローラを「ポップ」するとクラッシュする原因となる奇妙な問題が発生しています。プッシュされたビューコントローラを「適切に」リリースするとiPhoneがクラッシュする
ナビゲーションコントローラーのスタックにプッシュした後でビューコントローラーを解放するコード行に絞りました。
は私のコードは次のようになります。
SomeViewController *viewController = [[SomeViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release]; //offending line
今、このが適切なメモリ管理コードであるが、残念ながら私は「ダブルフリーのインスタンス0Xに送ら.....」エラーを取得しています(中いくつかのケース)と私のアプリケーションがクラッシュします。これは、一般に、ビューコントローラをポップするときに発生します。
私は何を見るべきかについての提案を探しています。私は立ち往生している。
ありがとうございます。
を編集します。以下は、ルイスが提案したスタックトレースダンプの結果です。
最初のリリースでは、保持カウントは13です(これはCocoaTouchベースクラスの深いコードのためです)。最終的にはこれに降り:
#2009-08-06 22:33:18.304 My App [26601:20b] ** RELEASE CALLED ** 2009-08-06 22:33:18.306 My App [26601:20b] Retain count was : 1 0 My App 0x000033ec start + 4700 1 CoreFoundation 0x302042e8 CFRelease + 136 2 CoreFoundation 0x30227249 CFNumberGetValue + 2937 3 CoreFoundation 0x30204421 _CFRelease + 241 4 Foundation 0x30506515 NSPopAutoreleasePool + 341 5 QuartzCore 0x00b5436e CA_CGRectUnapplyInverseTransform_ + 19738 6 QuartzCore 0x00b54109 CA_CGRectUnapplyInverseTransform_ + 19125 7 CoreFoundation 0x302454a0 CFRunLoopRunSpecific + 3696 8 CoreFoundation 0x30244628 CFRunLoopRunInMode + 88 9 GraphicsServices 0x32044c31 GSEventRunModal + 217 10 GraphicsServices 0x32044cf6 GSEventRun + 115 11 UIKit 0x309021ee UIApplicationMain + 1157 12 My App 0x00002258 start + 200 13 My App 0x000021c6 start + 54 14 ??? 0x00000001 0x0 + 1 2009-08-06 22:33:18.307 My App [26601:20b] ########### DEALLOC
objc[26601]: FREED(id): message retainCount sent to freed
物体= 0xd09070
Iは、上記の問題の行省略([ViewControllerをリリース];)をカウントを保持しますそれを2にするだけで、インスタンスは決してdeallocされません。
私が家に帰るとき、私は –
は、この結果に疑問を更新...これを試してみましょう... –
これは最終的に私が把握助けこの問題は、アプリの別の場所で二重にリリースされたラベルだった。 –