假设我的字典中包含可能存在或不存在的键的对象。检查此密钥是否存在的标准做法是什么?
例如,我写的内容如下:
id temp;
temp = [dict objectForKey: @"id"];
if (temp != [NSNull null]) {
uid = [temp intValue];
}
temp = [dict objectForKey: @"name"];
if (temp) {
[name release];
name = [[NSString alloc] initWithString: temp];
}
temp = [dict objectForKey: @"latitude"];
if (temp != [NSNull null]) {
[latitude release];
latitude = [[NSNumber alloc] initWithDouble: [temp doubleValue]];
}
temp = [dict objectForKey: @"longitude"];
if (temp != [NSNull null]) {
[longitude release];
longitude = [[NSNumber alloc] initWithDouble: [temp doubleValue]];
}
我应该使用自动释放池包围此代码吗?每次我将temp指向字典中的对象时,是否必须释放,或者池是否自动处理?有没有更好的方法来处理错误?
答案 0 :(得分:1)
objectForKey:
不会返回自动释放的对象,它会返回指向所需对象的直接指针,因此您不需要内部自动释放池。
如果找不到所需的对象,objectForKey:
将返回nil
,这就是您应该在此处测试的内容:
id obj = [dict objectForKey:@"someKey"];
if(obj == nil) {
//not found
}
此外,如果您要在整个地方执行此操作,您可能希望将这些实例变量声明为保留属性:
[ivar release];
ivar = ...;
在.h
文件中声明属性,如下所示:
@property (nonatomic, retain) NSNumber *latitude;
然后你会在@implementation
:
@synthesize latitude;
完成后,您只需执行以下操作:
self.latitude = temp;
答案 1 :(得分:1)
我使用了这篇文章中描述的方法:How to map JSON objects to Objective C classes?