字典、自动释放池和临时对象
假设我有一本字典,里面充满了可能存在也可能不存在的键的对象。检查此密钥是否存在的标准做法是什么?
例如,我写的内容如下所示:
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 指向字典中的对象时是否都必须释放,还是池会自动处理该问题?有没有更好的方法来处理错误?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我使用这篇文章中描述的方法:如何将 JSON 对象映射到 Objective C 类?
I use the method described in this post: How to map JSON objects to Objective C classes?
objectForKey:
不返回自动释放的对象,它返回指向所需对象的直接指针,因此您不< /strong> 这里需要一个内部自动释放池。如果找不到所需的对象,
objectForKey:
将返回nil
,所以这就是您应该在这里测试的内容:此外,它看起来您可能想要将这些实例变量声明为保留属性,如果您要在各处执行此操作:
在
.h
文件中声明属性,如下所示:然后您会这样做这在您的
@implementation
中:完成后,您可以简单地执行以下操作:
objectForKey:
does not return an autoreleased object, it returns a direct pointer to the desired object, therefore you do not need an inner autorelease pool here.If the desired object is not found,
objectForKey:
will returnnil
, so that is what you should be testing here:Also, it looks like you might want to declare those instance variables as retained properties if you're going to be doing this all over the place:
Declare the properties in your
.h
file like so:Then you'd do this within your
@implementation
:Once that's done, you can simply do the following instead: