objective-c - 如何检查 CGPoint 是否已初始化?

标签 objective-c

我想最初将 CGPoint 属性设置为特定点(屏幕中间)。其他方法随后可能希望更改此属性。我的想法是如果在 getter 中为空则初始化它,但是我收到消息 invalid argument type 'struct CGPoint' to unary expression。我也尝试过使用 if property == nil or 0 但没有成功。

有什么想法吗?

-(CGPoint)graphOrigin
{
    // initialise to centre of screen if has not been set
    if(!_graphOrigin) // this expression is causing the problem
    {
        CGPoint origin = CGPointMake(self.bounds.origin.x + self.bounds.size.width / 2, self.bounds.origin.y + self.bounds.size.height / 2);

        _graphOrigin = origin;
    }

return _graphOrigin;

最佳答案

CGPoint 是一个结构,因此您不能将它设置为 nil 或 NULL(它不是指针)。从某种意义上说,确实没有“未初始化”状态。也许您可以使用 {0.0, 0.0} 来指定未设置的 CGPoint,但这也是一个有效的坐标。或者您可以使用负的 xy 值来标记“未初始化”的点,因为负值不能作为有效的绘图点,但这有点麻烦,也是。

最好的选择可能是做以下两件事之一:

  1. 将属性存储为指向 CGPoint 的指针。未初始化时,此值可以设置为 NULL。当然,您必须担心 mallocing 和 freeing 值。
  2. CGPoint 与名为 pointInitialized 或类似名称的 BOOL 一起存储,初始设置为 NO,但在点初始化后设置为 YES。您甚至可以将其包装在一个结构中:

    struct {
        CGPoint point;
        BOOL initialized;
    } pointData;
    

关于objective-c - 如何检查 CGPoint 是否已初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928893/

相关文章:

objective-c - NSWindow - 显示始终位于当前窗口顶部的新窗口

ios - 从单元格到托管对象的 keyValue 观察者

ios - Objective-C/iPhone 'Hello World' 应用程序的显示不正确

ios - 从 Facebook iOS 7 获取用户名和个人资料图片

ios - 如何使用 iOS 按距离对数组进行排序

Xcode 的 Objective-C 错误

iphone - ios map 问题 - ios map 上显示多条线

iphone - 为什么要在 init 方法中调用 autorelease 来定义 iVar?

ios - 如何覆盖单例类 Objective C 中属性的 getter/setter

iphone - 带有 Nib 文件和继承的 UIViewController