UIACCELEROMEMOMEMOMETOR EXC_BAD_ACCESSデバイスでのクラッシュ
-
28-09-2019 - |
質問
UiAccelerメーターの実装に少し奇妙な問題に直面しています。 uaitbiewcontrollerを使用してuiaccecelerメーターを使用したくないが、uiviewcontroller内でアクティブにしたい行を押した後、シミュレーターを使用するときはすべて問題ありませんが、デバイスiphone 3gを使用してテストすると、exc_bad_accessを取得しました。返されるボタンを押すことにより。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ShakeControl *percView = [[ShakeControl alloc] init]; // ... // Pass the selected object to the new view controller. [self.navigationController pushViewController:percView animated:YES]; [percView release]; }
percview release];を無効にすると正常に動作しますが、解決策のようには聞こえません。どんなアイデアも感謝しています。
シェイクコントロールの実装:
- (void)viewDidLoad { [super viewDidLoad]; [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / kUpdateFrequency]; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; } - (void)viewDidUnload { [super viewDidUnload]; [[UIAccelerometer sharedAccelerometer] setDelegate:nil]; }
どうも
解決
viewDidUnload
メソッドは、メモリ警告など、特定の場合にのみ呼び出されます。デリゲートを削除する必要があります dealloc
それも。
他のヒント
却下した後にリリースしてみてください。PushViewControllerが保持されるかどうかはわかりません。
環境変数を設定しますnszombiesEnabled&nsautoreleaeasefreedobjeckeckeckEnabled 1の値は1です。これにより、オブジェクトが実際に扱われなくなり、過剰リリースがどこから来ているかを示すコンソールログを取得する必要があります。
どのオブジェクトが過剰にリリースされているかがわかったら、パフォーマンスツールを使用してRunを使用でき、不均衡を見つけるために保持/リリースが呼び出されたすべての場所を確認します。
所属していません StackOverflow