0

UIAccelerometer の実装で少し奇妙な問題に直面しています。UIAccelerometer を使用したくない UITableViewController がありますが、行を押した後、UIViewController 内の行をアクティブにしたいのですが、シミュレーターを使用するとすべて問題ありませんが、デバイス iPhone 3G を使用してテストすると、EXC_BAD_ACCESS が発生しました戻るボタンを押すことによって。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


     ShakeControl *percView = [[ShakeControl alloc] init];
     // ...
     // 選択したオブジェクトを新しいビュー コントローラーに渡します。
     [self.navigationController pushViewController:percView アニメーション:YES];
     [percView リリース];


}

[percView release]; を無効にすると問題なく動作しますが、解決策とは思えません。任意のアイデアをいただければ幸いです。

シェイク コントロールの実装:

- (void)viewDidLoad {
    [super viewDidLoad];
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / kUpdateFrequency];
    [[UIAccelerometer sharedAccelerometer] setDelegate:self];

}

- (void)viewDidUnload {
    [super viewDidUnload];

    [[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}

どうも

4

3 に答える 3

1

このviewDidUnloadメソッドは、メモリ警告などの特定の場合にのみ呼び出されます。デリゲートdeallocも削除する必要があります。

于 2010-11-04T21:08:25.203 に答える
0

環境変数 NSZombiesEnabled と NSAutoreleaseFreedObjectCheckEnabled の値を 1 に設定できます。これにより、オブジェクトが実際に割り当て解除されるのを防ぐことができます。その後、オーバーリリースの原因を示すコンソール ログを取得する必要があります。

どのオブジェクトが過剰に解放されているかがわかったら、[Run With Performance Tools] -> [Allocations] を使用して、retain/release が呼び出されたすべての場所を確認し、不均衡を見つけることができます。

于 2010-11-04T15:50:11.030 に答える
0

閉じた後に解放してみてください。pushViewController が保持されているかどうかはわかりません。

于 2010-11-04T15:21:45.950 に答える