如何正确复制并返回CGFloat



我有一段代码,用来复制我需要记住的浮点值。

- (void) rememberThisFloatForLater:(CGFloat)floatToRemember {
self.rememberedFloat = &(floatToRemember);
}

这是头文件中的self.rememberedFloat。。。

@property (assign) CGFloat *rememberedFloat;

当我试图返回记忆中的浮动时,我的问题就在这里。当我返回它时,我得到6.92867051318e-310,我应该得到3.14159265359,因为这就是floatToRemember的值。我哪里错了?

- (CGFloat) floatYouShouldRemember {
return *(self.rememberedFloat);
}
CGFloat是一个基元类型。如果您拥有CGFloat*类型的属性,那将是非常、非常、非常不寻常的。请改用CGFloat。

想想你一直在做什么:floatToRemember是一个方法参数,它与局部变量大致相同。您正在获取该变量的地址并将其存储。然后您的方法返回。这意味着局部变量消失了。这意味着它的地址现在完全是垃圾。实际上比彻头彻尾的垃圾还要糟糕;它是一个不确定的值,几乎任何使用它的操作都是未定义的行为,如果幸运的话,它可能会立即导致程序崩溃(如果不幸的话,当客户使用它时,也可能导致程序崩溃)。

最新更新