我需要一些帮助来理解如何使用调试工具——以前关于这个主题的帖子建议使用 NSZombie 和设置断点。这些对我不起作用,这意味着我不明白如何正确使用它们——或者如何解释他们告诉我的内容。
(基本上,我是在真空中操作——我的工作场所或社交圈中没有人会进行目标 c 编程……)
这是有问题的代码。我的想法是制作 100 个对象的移动数组。例程motionDataArray 由motionManager startDeviceMotionUpdatesUsingReferenceFrame 方法调用。数组被填充,当它的长度达到 100 时,它会删除第一个对象,因此数组中总是只有 100 个对象。这样,我想,我可以取数据的平均值并消除很多噪音。
(我想可能有更好的方法来实现这个目标,但这是我想出的......)
- (void) motionDataArray: (CMCalibratedMagneticField) field
{
NSDictionary *motionData = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithDouble: motionManager.deviceMotion.gravity.x],@"gravity_x",
[NSNumber numberWithDouble: motionManager.deviceMotion.gravity.y],@"gravity_y",
[NSNumber numberWithDouble: motionManager.deviceMotion.gravity.z],@"gravity_z",
[NSNumber numberWithDouble: field.field.x],@"mag_x",
[NSNumber numberWithDouble: field.field.y],@"mag_y",
[NSNumber numberWithDouble: field.field.z],@"mag_z",
[NSNumber numberWithDouble: `enter code here`locationManager.heading.magneticHeading],@"mag_heading",
[NSNumber numberWithDouble: motionManager.deviceMotion.attitude.roll],@"roll",
[NSNumber numberWithDouble: motionManager.deviceMotion.attitude.yaw],@"yaw",
[NSNumber numberWithDouble: motionManager.deviceMotion.attitude.pitch],@"roll",
nil];
//NSLog(@"%d",[motionArray count]);
if([timerArray count] > arrayCount - 1)
{
int i = [timerArray count] - arrayCount;
for (int j = 0; j < i + 1; j++)
{
[motionArray removeObjectAtIndex:0];
}
}
[motionArray addObject:motionData];
}
代码在前两百次左右的迭代中运行良好,然后出现崩溃和错误:未分配被释放的指针。
任何关于如何解释 Instruments 或任何其他调试方法的输出的好的指示都会对我有很大帮助,我相信对其他人来说也是如此。提前谢谢了...
蒂姆·雷德菲尔德