Iphone 是否通过分配新的NSNumber更改NSNumber值?
我知道NSNumber是不可变的,但我仍然需要在我的应用程序中更改它。我之所以使用它,是因为它是一个对象,因此可以与@property一起使用(如果可以,我会在心跳中使用float或CGFloat,但遗憾的是,我不能) 有没有办法只覆盖旧的NSNumber实例?我正在尝试这个:Iphone 是否通过分配新的NSNumber更改NSNumber值?,iphone,iphone-sdk-3.0,immutability,nsnumber,Iphone,Iphone Sdk 3.0,Immutability,Nsnumber,我知道NSNumber是不可变的,但我仍然需要在我的应用程序中更改它。我之所以使用它,是因为它是一个对象,因此可以与@property一起使用(如果可以,我会在心跳中使用float或CGFloat,但遗憾的是,我不能) 有没有办法只覆盖旧的NSNumber实例?我正在尝试这个: NSNumber *zero = [[NSNumber alloc] initWithFloat:0.0]; myNSNumber = zero 但这不会改变值。这是我的代码的简化版本,因为我正在更改根视图控制器的参数
NSNumber *zero = [[NSNumber alloc] initWithFloat:0.0];
myNSNumber = zero
但这不会改变值。这是我的代码的简化版本,因为我正在更改根视图控制器的参数(我知道,不是MVC友好的)。不过,值的变化应该是相同的赋值,对吗?我应该先发布我的手机号码吗?我应该为myNSNumber设置@property在什么位置
谢谢 您可以使用方便的方法,如
numberWithDouble:
或numberWithInteger:
获取NSNumber的自动释放实例。无需调用alloc/init,尤其是当您使用retain
说明符(这些说明符在赋值时自动保留/释放)分配给属性时。((myViewController*)self.parentViewController).otherViewController.value
心灵调试告诉我,这个属性链中的一个对象是nil。我的钱花在parentViewController上,因为我经常忘记设置父属性。您可以在
@property
声明中使用基元类型。e、 g.@属性(非原子,赋值)浮点foo谢谢你,本。执行此操作后,我似乎无法更改其他对象参数的值(我正在对它们使用@property(非原子,赋值):((myViewController*)self.parentViewController).otherViewController.value=1.0;这不应该起作用吗?再次感谢Ben!重新分配NSNumbers会起作用吗?另外,正如我在Ben的评论中所说,即使使用带浮点数的@property(nonatomic,assign):((myViewController*)self.parentViewController)也无法更改值.otherViewController.value=1.0;之后似乎无法使用assert语句。有什么想法吗?是的,它可以用于分配/重新分配到NSNumber
属性。您能否在最近的示例中确认value
属性是一种值类型(如CGFloat、double等)使用assign
说明符?您是@synthesis
调用所有这些属性还是自己编写它们的访问器和变异器?value属性是一个float,我正在使用@property(readwrite,assign)说明符。我正在合成属性。下面是我刚才玩的:((myViewController*)self.parentViewController.otherViewController.value=1.0;assert((myViewController*)self.parentViewController.otherViewController.value==1.0);此语句失败。我真的很困惑为什么会发生这种情况。(还有,我如何激活那些光滑的小高亮代码块?)非常感谢您的帮助!我想我们需要查看您的所有代码才能进一步了解这一点。我刚刚运行了一些快速测试,我真的不明白为什么断言会失败,除非属性声明有问题。不过,作为风格问题,测试浮点值之间的相等性是一个坏主意,因为它们可能不同由于四舍五入错误和机器精度的原因,请使用反勾号执行类似于此的内联格式设置(有关帮助,请参阅《格式指南》)。