【发布时间】:2010-08-25 02:11:17
【问题描述】:
我定义了以下 C 结构:
typedef 结构 { 浮动 x; 浮动y; 浮动z; } 指标;
我想将加速度计点存储在一个数组中,然后再用它做一些事情。
所以我有一个可变数组,在我的 viewDidLoad 方法中像这样初始化:
metricsArray_ = [[[NSMutableArray alloc] init]retain];
在我的 didAccelerate 方法中,我创建了一个结构来存储值并将其添加到数组中:
metric metricData;
metricData.x = acceleration.x;
metricData.y = acceleration.y;
metricData.z = acceleration.z;
NSValue *metricObject = [[NSValue valueWithBytes:&metricData objCType:@encode(struct metric)]retain];
[metricsArray_ addObject:metricObject];
稍后当我停止轮询数据时,我尝试遍历数组并记录值,但值全为零:
NSEnumerator * enumerator = [metricsArray_ objectEnumerator];
id element;
while(element = [enumerator nextObject])
{
metric metricData;
[element getValue:&metricData];
NSLog(@"x=%f,y=%f,z=%f",metricData.x, metricData.y,metricData.z);
}
我在这里做错了什么?有没有更好的方法来存储加速度计数据点?我想将它们存储在一个结构而不是一个对象中(尽管你最终不得不使用 NSValue )
谢谢
【问题讨论】:
-
仅供参考:没有理由写 [[[NSMutableArray alloc] init]retain]。如果刚刚从
alloc获得它,那么您已经拥有它,所以保留它只是意味着您现在必须两次 发布它。保留metricObject也可能是错误的,除非你将它释放到你没有向我们展示的地方。
标签: iphone objective-c ios-simulator