正在使用Objective-C中的「自我」,或者只是一個良好的習慣?我一直使用它,根本沒有使用它,我似乎沒有真正注意到任何區別。這不正是暗示嗎?「自我」是必需的嗎?
回答
self
,如果你想爲一個對象發送消息,那麼,它self
是必要的。通過獲取者/設置者訪問屬性有時也是有益的,在這種情況下,您還需要使用self
,如self.propertyname
或self.propertyname = value
。 (這些都是不等同於propertyname
或propertyname = value
。
當引用實例變量時沒有必要。當你想對當前對象的引用傳遞給另一個方法,設定的委託時,喜歡它是必要的:
[someObj setDelegate:self];
當前對象上調用同一個類中的方法時,這也是必要的:
[self doMethod]
當分配給實例變量時,如果依賴setter進行復制或保留,則必須使用self。 – 2010-05-07 13:56:24
是的,因爲目標C沒有方法調用,如C/C++,但使用消息中的上下文發送,自像
[自doSomething的];和self.myProperty;
是必要的。
如果您正在訪問伊娃,不需要自己。
希望有所幫助。
-CV
用於處理變量它取決於。如果你想使用一個合成的getter或setter,使用點符號和self。
self.someProperty = @"blah"; //Uses the setter
someProperty = @"blah"; //Directly sets the variable
請注意,您不必使用點符號。但我們很多人喜歡它。不過,我警告你:點符號幾乎看起來像從非指針結構訪問字段,而不是將消息發送給對象。由於Objective-C對象是指向結構體的指針,因此''self.someiVar = @「this」'不能訪問實例變量;你可以使用'self> someiVar = @「this」(在類的實現中''>>'位是不必要的)。所以,如果你明白你在做什麼,以及你沒有做什麼,就用點符號。 – 2010-05-07 13:54:47
Actualy沒有必要每一次,但它是一個很好的做法,因爲它更容易爲其他人閱讀你的代碼。
而且有必要當你有在不同階層的同名對象,那麼「自我」 keywork會告訴你的軟件,你引用的對象在同一類。
這通常happends在更大的項目。
- 1. MongoDB - 是DBREF必需的嗎?
- 2. apl是ssl必需的嗎?
- 3. 是XMLHttpRequestObject.onreadystatechange ...必需的嗎?
- 4. GLES2是glBindAttribLocation()必需的嗎?
- 5. ORACLE是QUOTA必需的嗎?
- 6. XAML - 是LayoutRoot必需的嗎?
- 7. RemoteControlClient - 音頻聚焦是必需/必需的嗎?
- 8. MVVM中的ObjectDataProvider不是必需的嗎?
- 9. 對象的引用是必需的嗎?
- 10. API是必需的狀態方法嗎?
- 11. 現在angularjs elvis不是必需的嗎?
- 12. Java Web服務 - 軸是必需的嗎?
- 13. Gtk.Widget.destroy()在Python中是必需的嗎?
- 14. WebApi可選參數 - 是必需的嗎?
- 15. Java是創建AMI所必需的嗎?
- 16. 安排在XML中是必需的嗎?
- 17. 是WCF服務必需的WindowsIdentity.Impersonate()嗎?
- 18. android - call_phone權限是必需的嗎?
- 19. ASP.NET MVC Ajax是必需的Microsoft.ajax.js嗎?
- 20. 核心數據總是必需的嗎?
- 21. Swift - 鏈接到必需的框架總是必要的嗎?
- 22. C++ Unicode加密庫必需(是嗎?)
- 23. jBPM是我需要的嗎?
- 24. backbone.js是我需要的嗎?
- 25. 是removeWidget()必需
- 26. 是單獨的boostrap js插件文件是必需的嗎?
- 27. BagOfBagsConcat是必需的UDF嗎?或者它是不好的形式?
- 28. NSNotification:對象屬性必須是自我嗎?
- 29. Python自我:我必須將自我傳遞給函數來引用自我嗎?
- 30. UITextView:我必須總是resignFirstResponder嗎?
你的意思從'self.property = value'變爲'property = value'? – JBRWilkinson 2010-05-07 13:39:28