2010-05-06 29 views

回答

2

你什麼時候使用它?當你需要它是public。從外部訪問它(沒有任何額外的訪問器),就是說。 :)

0

@public是一個可見性修飾符。這意味着聲明爲@public的實例變量可以被任何類的實例訪問。公共成員可以被子類或其他類訪問。相反,私人成員不能通過子類或其他類訪問

5

@public表示該ivar可以在任何地方訪問。

@private指的ivar是對類

@protected指的ivar是對類和子類的實例可訪問的實例訪問。

要訪問類之外的公共ivar,請使用標準的C結構指針運算符 - >例如

foo->instanceVarible = xyzzy; 

什麼時候使用它?就我而言:從不。 I 總是將實例變量定義爲@private(IBOutlets除外)並使用訪問器在類之外訪問它們。

+0

我得到你來自哪裏,但仍然是國際海事組織,我發現它總是有點矯枉過正,因爲它們實際上被設計爲和公開地行事時,總是使用訪問器創建私有變量。 – treznik 2010-05-06 14:53:01

+0

經過一段時間後它變成了第二天性,當然,如果它們是物體,除非使用GC,否則無論如何您都需要訪問器。 – JeremyP 2010-05-06 16:24:43

0

這個問題是關於編碼實踐。

如果您正在編寫非常嚴格的代碼,您將始終使用@private作爲實例變量,以確保只有類函數才能訪問它們。在我看來,這隻在非常特定的情況下才是必需的,例如,類變量(一個類的多個實例有一個變量)。

大多數時間@protected是最適合普通實例變量,因爲它允許子類直接訪問它們。它更自然,並且與擴展課程的想法一致。根據實際訪問它們的方式,Objective C實際上可能會使用該類的setter和getter函數。 @protected對於有效的代碼並使代碼更具可讀性是可取的。

@public保留用於快速或髒編程。直接訪問實例成員的速度可能會更快,或者您可能正在與另一個編程語言/庫進行交互,並且正在編寫一些膠水。我儘量避免它,因爲這意味着代碼維護更加困難。

顯然,您可以始終使用@public - 回到C編程的美好時光。

你當然可以選擇,不是因爲它是內部的類定義一個類變量的任何存取或因爲聲明是@public但作爲目標C可以很容易地原型他們@property@synthesize那裏似乎不是太大點。內部類變量不需要setter/getters,因爲任何類方法都可以直接訪問它們。