2015-02-08 191 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語句中的'!'表示如果這不是真的。

你的代碼是做什麼的,它是檢查是否有一個起源,如果沒有它會創建一個新的。之所以這麼做是因爲你不想創造多個原產地。

希望這會有所幫助。如果您還有其他問題,請隨時提問。 :)