在閱讀question on @private後,我明白這是如何工作的。但是,由於所有變量都默認爲@protected,並且在未定義訪問器的情況下無法真正訪問變量,@public究竟做了什麼?你什麼時候使用它?Objective-C中的「@public」是什麼意思?
回答
你什麼時候使用它?當你需要它是public
。從外部訪問它(沒有任何額外的訪問器),就是說。 :)
@public
是一個可見性修飾符。這意味着聲明爲@public
的實例變量可以被任何類的實例訪問。公共成員可以被子類或其他類訪問。相反,私人成員不能通過子類或其他類訪問。
@public表示該ivar可以在任何地方訪問。
@private指的ivar是對類
@protected指的ivar是對類和子類的實例可訪問的實例訪問。
要訪問類之外的公共ivar,請使用標準的C結構指針運算符 - >例如
foo->instanceVarible = xyzzy;
什麼時候使用它?就我而言:從不。 I 總是將實例變量定義爲@private(IBOutlets除外)並使用訪問器在類之外訪問它們。
這個問題是關於編碼實踐。
如果您正在編寫非常嚴格的代碼,您將始終使用@private
作爲實例變量,以確保只有類函數才能訪問它們。在我看來,這隻在非常特定的情況下才是必需的,例如,類變量(一個類的多個實例有一個變量)。
大多數時間@protected
是最適合普通實例變量,因爲它允許子類直接訪問它們。它更自然,並且與擴展課程的想法一致。根據實際訪問它們的方式,Objective C實際上可能會使用該類的setter和getter函數。 @protected
對於有效的代碼並使代碼更具可讀性是可取的。
@public
保留用於快速或髒編程。直接訪問實例成員的速度可能會更快,或者您可能正在與另一個編程語言/庫進行交互,並且正在編寫一些膠水。我儘量避免它,因爲這意味着代碼維護更加困難。
顯然,您可以始終使用@public
- 回到C編程的美好時光。
你當然可以選擇,不是因爲它是內部的類定義一個類變量的任何存取或因爲聲明是@public
但作爲目標C可以很容易地原型他們@property
和@synthesize
那裏似乎不是太大點。內部類變量不需要setter/getters,因爲任何類方法都可以直接訪問它們。
- 1. 是什麼意思:是什麼意思?
- 2. 當在TASM中聲明段時,「para public use16」是什麼意思?
- 3. 在Swift 3中,「public init(){}」是什麼意思?
- 4. 是什麼意思,在Python中是什麼意思?
- 5. SURF的min_dist和max_dist是什麼意思,FlannMatcher是什麼意思
- 6. 「?」是什麼意思?調用jsp的標記是什麼意思?
- 7. %{}是什麼意思?
- 8. '#'是什麼意思?
- 9. 「?」是什麼意思?
- 10. #{...}是什麼意思?
- 11. || =是什麼意思?
- 12. @是什麼意思
- 13. $$ $$是什麼意思?
- 14. `/ * @`是什麼意思?
- 15. 「=」是什麼意思
- 16. + =是什麼意思?
- 17. {..} [..]是什麼意思?
- 18. 什麼是:!:意思?
- 19. @ []是什麼意思?
- 20. 什麼是「||」意思?
- 21. /([^.]*)\.(.*)/是什麼意思?
- 22. &**是什麼意思?
- 23. @(...)是什麼意思?
- 24. &@是什麼意思?
- 25. 「\\。\」,「\ ?? \」,「\\?\」,「\\」是什麼意思?
- 26. &=是什麼意思?
- 27. {%=%}是什麼意思?
- 28. 是什麼意思?
- 29. %%是什麼意思?
- 30. {}是什麼意思?
我得到你來自哪裏,但仍然是國際海事組織,我發現它總是有點矯枉過正,因爲它們實際上被設計爲和公開地行事時,總是使用訪問器創建私有變量。 – treznik 2010-05-06 14:53:01
經過一段時間後它變成了第二天性,當然,如果它們是物體,除非使用GC,否則無論如何您都需要訪問器。 – JeremyP 2010-05-06 16:24:43