我在名为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,我需要在代码中进行哪些更改?
答案 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
。