如何正确复制和返回CGFloat

时间:2014-09-28 23:43:20

标签: ios objective-c

我有这个代码,我复制我需要记住的浮动。

- (void) rememberThisFloatForLater:(CGFloat)floatToRemember {

self.rememberedFloat = &(floatToRemember);

}

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

@property (assign) CGFloat *rememberedFloat;

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

- (CGFloat) floatYouShouldRemember {

return *(self.rememberedFloat);
}

1 个答案:

答案 0 :(得分:3)

CGFloat是一种原始类型。你将拥有CGFloat *类型的属性,这将非常非常非常。请改用CGFloat。

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