2014-05-01 87 views
-4

在IOS頁基於應用程序模板有用來聲明實例變量2種不同的方式:目標C @property

一個在.H聲明(DataViewController.h)如:

@interface DataViewController : UIViewController 
@property (strong, nonatomic) id dataObject; 

另一種是在.M定義爲:

@interface ModelController() 
@property (readonly, strong, nonatomic) NSArray *pageData; 
@end 

有什麼區別/優點還是隻是一些老VS一些新的語法?

+0

'@Prototype'是什麼?你的意思是類定義vs類擴展是不一樣的東西 –

+0

@ Daij-Djan做了一個mistypo它是'@Property當然 – user310291

回答

1

@property你的意思是?

將您的屬性放在.m文件中使它們成爲半私有的。這就是所謂的匿名類別或類擴展。

通過這樣做,您在.m文件中定義的接口僅在.m文件的範圍內(很容易)可見。

客觀C反思意味着什麼都不是真正的私人。

我傾向於不使用類擴展,因爲它們對子類不可見。我根據情況使用@private或@protected,並假定我的類的用戶不會違反我定義的合同。如果他們這樣做,他們自己承擔風險。

+0

所以蘋果不遵循最佳做法? – user310291

+0

是什麼讓你這麼說? Apple的框架旨在供不同羣體的客戶公共消費,因此他們的框架是您想要使用類擴展的完美例子。我建議你在Xcode文檔中搜索字符串「Class Extensions Extend the Internal Implementation」並閱讀結果部分。 –

+0

鑑於此屬性的討論...有沒有辦法宣佈他們私人/保護 - 這只是變量 –