そのため、テスターから取得したクラッシュ ログのトラブルシューティングに少し苦労しています。アプリは でクラッシュし、EXC_CRASH (SIGSEGV)
いずれかのスレッドで唯一認識可能なコードはスレッド 6 にあります。スタック トレースは次のようになります。
...
15 MyApplication 0x002cfcf2 0xfb000 + 1920242
16 MyApplication 0x00107f26 -[CCViewController dealloc] (CCViewController.m:73)
17 MyApplication 0x001cc27c -[CCSubmitReportController dealloc] (CCSubmitReportController.m:646)
18 CoreFoundation 0x36f41c3c 0x36f3f000 + 11324
...
26 Foundation 0x35396bd4 0x35387000 + 64468
27 MyApplication 0x001c794e -[CCGetFeedOperation main] (CCGetFeedOperation.m:102)
...
の102 行目を見るとCCGetFeedOperation
、作業の最後に操作の自動解放プールが空になっているだけです。
だから私は、自動解放プールがデリゲートを解放しようとする理由を理解しようとしています。デリゲートへの参照は、次のように操作クラスに渡されます。
@property (assign) id <CCGetFeedOperationDelegate> feedDelegate;
私が考えることができる唯一のことは、メイン スレッドでメソッドを呼び出し、それが完了するのを待ってからプール ドレインを呼び出すということです。
invocation = [NSInvocation invocationWithTarget:feedDelegate
selector:@selector(operation:didGetFeed:)
retainArguments:YES, self, feedDetailsModel];
しかし、それでも、操作のプールによってビュー コントローラーの割り当てが解除される理由を説明できるとは限りません。考え?
編集:ところで、これを再現できませんでした。私は、テスターと野生の人々からのクラッシュレポートでしか見たことがありません.
編集 2: 自動解放プールは非常に単純で、操作のmain
メソッドの開始時に割り当てられ、作業が完了すると排出されます。