2010-05-07 54 views
6

正在使用Objective-C中的「自我」,或者只是一個良好的習慣?我一直使用它,根本沒有使用它,我似乎沒有真正注意到任何區別。這不正是暗示嗎?「自我」是必需的嗎?

+0

你的意思從'self.property = value'變爲'property = value'? – JBRWilkinson 2010-05-07 13:39:28

回答

5

self,如果你想爲一個對象發送消息,那麼,它self是必要的。通過獲取者/設置者訪問屬性有時也是有益的,在這種情況下,您還需要使用self,如self.propertynameself.propertyname = value。 (這些都是不等同於propertynamepropertyname = value

+0

如果我使用消息符號而不是點符號怎麼辦?有關係嗎? – Rob 2010-05-07 13:52:30

+0

不是。仍然需要自我。 – 2010-05-07 13:58:01

+0

真的CLEAR的答案,因爲在網上的很多教程都說,是相同的東西,謝謝你的回答 – gbk 2014-09-09 10:06:27

3

當引用實例變量時沒有必要。當你想對當前對象的引用傳遞給另一個方法,設定的委託時,喜歡它是必要的:

[someObj setDelegate:self]; 

當前對象上調用同一個類中的方法時,這也是必要的:

[self doMethod] 
+2

當分配給實例變量時,如果依賴setter進行復制或保留,則必須使用self。 – 2010-05-07 13:56:24

0

是的,因爲目標C沒有方法調用,如C/C++,但使用消息中的上下文發送,自像

[自doSomething的];和self.myProperty;

是必要的。

如果您正在訪問伊娃,不需要自己。

希望有所幫助。

-CV

1

用於處理變量它取決於。如果你想使用一個合成的getter或setter,使用點符號和self。

self.someProperty = @"blah"; //Uses the setter 
someProperty = @"blah"; //Directly sets the variable 
+0

請注意,您不必使用點符號。但我們很多人喜歡它。不過,我警告你:點符號幾乎看起來像從非指針結構訪問字段,而不是將消息發送給對象。由於Objective-C對象是指向結構體的指針,因此''self.someiVar = @「this」'不能訪問實例變量;你可以使用'self> someiVar = @「this」(在類的實現中''>>'位是不必要的)。所以,如果你明白你在做什麼,以及你沒有做什麼,就用點符號。 – 2010-05-07 13:54:47

1

Actualy沒有必要每一次,但它是一個很好的做法,因爲它更容易爲其他人閱讀你的代碼。

而且有必要當你有在不同階層的同名對象,那麼「自我」 keywork會告訴你的軟件,你引用的對象在同一類。

這通常happends在更大的項目。