正在使用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. apl是ssl必需的嗎?
- 2. XAML - 是LayoutRoot必需的嗎?
- 3. GLES2是glBindAttribLocation()必需的嗎?
- 4. MongoDB - 是DBREF必需的嗎?
- 5. RemoteControlClient - 音頻聚焦是必需/必需的嗎?
- 6. 對象的引用是必需的嗎?
- 7. MVVM中的ObjectDataProvider不是必需的嗎?
- 8. 安排在XML中是必需的嗎?
- 9. Java Web服務 - 軸是必需的嗎?
- 10. ASP.NET MVC Ajax是必需的Microsoft.ajax.js嗎?
- 11. 現在angularjs elvis不是必需的嗎?
- 12. android - call_phone權限是必需的嗎?
- 13. Gtk.Widget.destroy()在Python中是必需的嗎?
- 14. Java是創建AMI所必需的嗎?
- 15. C++ Unicode加密庫必需(是嗎?)
- 16. jBPM是我需要的嗎?
- 17. 是removeWidget()必需
- 18. NSNotification:對象屬性必須是自我嗎?
- 19. Html.BeginForm()是否必需?
- 20. AssemblyInfo.cpp是否必需?
- 21. 屬性%s是必需的
- 22. YouTube Api:snippet.live_chat_id是必需的
- 23. Swagger.ObjectModel.Builders.RequiredFieldException:'路徑'是必需的
- 24. 是dealloc上必需的removeObserver?
- 25. jQuery ajax()URL是必需的?
- 26. output.filename是必需的webpack
- 27. codeigniter的url編碼在這裏是必需的嗎?
- 28. XML的根結束標記是必需的嗎?
- 29. 是base.OnModelCreating(modelBuilder)必要的嗎?
- 30. 分頁是必要的嗎?
你的意思從'self.property = value'變爲'property = value'? – JBRWilkinson 2010-05-07 13:39:28