2015-02-08 192 views
0

伙计们可以有人解释我是什么if(!起源)的意思请!逻辑运算符Objective-C

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

你看语言文档吗? – Jerry101 2015-02-08 18:22:22

回答

0

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

关于'!'爆炸或不操作者,在最低的水平!测试非零。当应用于布尔值,像YES或NO这是真正的标量1或0,它作为一个逻辑非操作...

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

在问题的代码,!也被习惯施加到非标量值,一个对象的指针,但它的做同样的事情在低的水平,测试对于非零的烦躁,在这种情况下的非零:

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; 
} 
0

如果没有产地。 if语句中的'!'表示如果这不是真的。

你的代码是做什么的,它是检查是否有一个起源,如果没有它会创建一个新的。之所以这么做是因为你不想创造多个原产地。

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