我在实施UIAccelerometer时面临一个奇怪的问题。 我有一个UITableViewController,我不想使用UIAccelerometer,但按下行后我想在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]; }
THX
答案 0 :(得分:1)
只有在特定情况下才会调用viewDidUnload
方法,例如内存警告。您还必须删除dealloc
中的委托。
答案 1 :(得分:0)
解雇后尝试释放它,我不确定pushViewController是否会保留。
答案 2 :(得分:0)
您可以设置环境变量NSZombiesEnabled& NSAutoreleaseFreedObjectCheckEnabled,值为1。 这样可以防止对象真正被释放,然后你应该得到控制台日志,指出过度释放的来源。
您可以使用Run With Performance Tools - >分配后,您知道哪个对象被过度释放,并查看调用保留/释放的每个位置以发现不平衡。