如何检查CGSize是否已初始化(或者其值是否与“nil”不同)

时间:2014-02-20 19:53:21

标签: objective-c core-graphics

我在类中有一个CGSize属性,我需要检查它是否已经初始化。我知道CGSize不是一个对象,但一般来说,检查一个对象是否与nil不同的想法是一样的。怎么做?

3 个答案:

答案 0 :(得分:17)

您可以将它与CGSizeZero或您认为无效的任意大小进行比较。

if (!CGSizeEqualToSize(CGSizeZero, mySize)) {
   // do something
}

答案 1 :(得分:8)

这取决于你在“课堂上”的意思。如果这是一个实例变量,那么您的问题就会结束,因为您可以保证实例变量将自动初始化为某种形式的零(即CGSizeZero)。但是,如果你的意思是“在我的代码中某处”,例如一个自动变量,然后没有这样的测试;完全取决于你在使用之前初始化,直到你这样做,价值可能是任何东西(对不起,但这就是C的工作原理)。

总的来说,你的问题本身就是一种“难闻的气味”。如果在代码中的某个时刻对您来说这个值是否已初始化是很重要的,那么您做错了。这是你的价值;由你来初始化它(例如当你的整个对象被初始化时)。或者,如果由于某种原因你需要知道你的setter是否曾被调用过,那么你需要在你的setter中添加一个布尔值告诉它是否曾被调用过。

答案 2 :(得分:2)

CGSize是一个C结构。除少数例外(当用作iVar时),无法保证其初始化值。它可以是任何东西,尤其是在堆栈上创建时。

因此,您负责正确初始化它,并且因为“零”是有效值,所以无法保证是否故意将其设置为“零”,或者它是未初始化的。