分配NSNumber的问题

时间:2011-03-24 01:44:43

标签: iphone objective-c

我在名为Reservation的类中有一个NSNumber * did实例。 myres下面是Reservation

的实例
myres.did = [[NSNumber alloc] initWithInt:[[[data objectForKey:@"discount"] did] intValue]];

当我这样做时一切正常。然而,代码是丑陋的,当我这样做时:

myres.did = [data objectForKey:@"discount"] did];

我的代码崩溃了......我知道[[data objectForKey:@"discount"] did]返回一个对象,这是一个NSNumber。

有人可以向我解释为什么会这样吗?如果我想为另一个NSNumber分配NSNumber,我需要在代码中进行哪些更改?

3 个答案:

答案 0 :(得分:1)

代码在哪里崩溃?您的申请中是否发生了崩溃?

顺便说一下,在第二个例子中,你有一组不匹配的方括号。

在概念层面上,第一个代码示例将保留的对象放入myres.did,但第二个示例将自动释放对象放入myres.did。如果你以后使用剪切的第二个代码在myres.did上发布了一个版本,你可能会崩溃。

答案 1 :(得分:0)

首先确保您的对象的属性设置为retain

@property (nonatomic, retain) NSNumber *did;

并且您正在dealloc中释放该对象。

不幸的是,你所拥有的副本不能变得更短。你在这句话中做了什么:

myres.did = [[NSNumber alloc] initWithInt:[[[data objectForKey:@"discount"] did] intValue]];

从一个NSNumber引用中取整数值并将其移动到另一个引用中。整数内容(非引用(assign))可以这种方式移动。 NSNumber本身无法复制,因为它是不可变的。有关详细信息,请参阅this post。您的代码中必须有另一个问题,可能是不恰当的版本。

答案 2 :(得分:-1)

请参阅this supplemental answer,其中提供了复制NSNumber

的背景信息