逻辑运算符Objective-C

时间:2015-02-08 18:20:02

标签: objective-c logic

伙计们可以解释一下if(!origin)意味着什么!

-(void) setOrigin: (XYPoint *) pt {
        if (! origin)
        origin = [[XYPoint alloc] init];
        origin.x = pt.x; origin.y = pt.y;
        }

2 个答案:

答案 0 :(得分:0)

如果没有来源。 ' !'在if语句中表示如果不是这样。

你的代码做了什么,它是否检查是否有来源,如果它没有创建新的代码。之所以这么做是因为你不想创造不止一个来源。

希望这会有所帮助。如果您还有其他问题,请随时提出。 :)

答案 1 :(得分:0)

发布的代码看起来很有趣。在外部,该方法似乎承诺将某个对象的origin属性设置为传递点(pt)的值。在内部,如果尚未设置origin属性,它似乎只会这样做。

关于'!'在最低级别,是否是操作员!测试非零。当应用于布尔值时,如YES或NO,它们实际上是标量1或0,它充当逻辑NOT操作......

!YES is the same as !1 and equals NO
!NO is the same as !0 and equals YES

在问题的代码中,! idio应用于非标量值,对象指针,但它在低级别执行相同的操作,测试非零值,在这种情况下为非零:

SomeObject *someObject = nil;

!someObject is the same as !nil and the same as !0 and equals YES

如果已分配对象,则指针someObject具有非零值,因此

SomeObject *someObject = [SomeObject alloc];

!someObject equals NO

这个成语的一个常见用途是懒惰的吸气剂。属性最初为零,然后在第一次请求时给出非零值。

- (NSString *)someStringProperty {
    if (!_someStringProperty) {
        // this runs the first time, but not again because we set
        // _someStringProperty to be non-nil here
        _someStringProperty = @"hello world";
    }
    return _someStringProperty;
}