当尝试在字典中存储double或int时,我收到错误
错误:语义问题:向不兼容类型'id'的参数发送'double'
我有以下代码
[data setValue:longitude forKey:@"longitude"];
Run Code Online (Sandbox Code Playgroud)
经度是双倍的.
我应该怎么存储这个?我应该只创建一个指向int或double的指针吗?
Kon*_*ess 22
正如其他帖子所述,您需要使用a NSNumber
来包装对象中的double值.这样做的原因是所有Cocoa基础集合类都设计为使用对象而不是原始值.正如你的建议,通过一些工作,你实际上可以传递一个指向double值的指针(我想,如果你设法将它作为一个id
类型指针强制转换),但是一旦你的方法完成并且double超出了范围,它就会被释放,你的指针现在指向垃圾.对于一个对象,集合(NSDictionary
在这种情况下)将在添加对象时保留对象,并在删除对象时将其释放,或者在集合被删除时释放它dealloc
,确保您的价值能够存活直到您不再需要它为止.
我会这样做:
哪个将使您的NSNumber对象只有+1引用计数(保留它的字典)并且没有自动释放
NSNumber *tempNumber = [[NSNumber alloc] initWithDouble:longitude];
[data setValue:tempNumber forKey:@"longitude"];
[tempNumber release];
另一个建议的做法:
[data setValue:[NSNumber numberWithDouble: longitude] forKey:@"longitude"];
也可以正常工作但你的对象最终会得到+1引用计数和numberWithDouble方法的自动释放.在可能的情况下,我尽量避免自动释放,但代码更简洁.因人而异.
尝试使用NSNumber:
[data setValue:[NSNumber numberWithDouble: longitude] forKey:@"longitude"];
归档时间: |
|
查看次数: |
12349 次 |
最近记录: |