0

我在实现 UIAccelerometer 时遇到了一个奇怪的问题。我有一个 UITableViewController,我不想使用 UIAccelerometer,但是在按下我想在 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 {
    [超级视图DidLoad];
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / kUpdateFrequency];
    [[UIAccelerometer sharedAccelerometer] setDelegate:self];

}

- (void)viewDidUnload {
    [超级 viewDidUnload];

    [[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}

谢谢

4

3 回答 3

1

只有在特定情况下才会调用该viewDidUnload方法,例如内存警告。您也必须删除代表dealloc

于 2010-11-04T21:08:25.203 回答
0

关闭后尝试释放它,我不确定 pushViewController 是否保留。

于 2010-11-04T15:21:45.950 回答
0

您可以将环境变量 NSZombiesEnabled 和 NSAutoreleaseFreedObjectCheckEnabled 的值设置为 1。这将防止对象真正被释放,然后您应该获得指示过度释放来自何处的控制台日志。

一旦您知道哪个对象被过度释放并查看调用保留/释放以发现不平衡的每个位置,您就可以使用 Run With Performance Tools -> Allocations。

于 2010-11-04T15:50:11.030 回答