2013-08-06 39 views
0

我是新來的Objective-C,和我看到一些像打開下面來源代碼:差異私有變量和財產類擴展聲明

DetailedViewController.m:

@interface DetailedViewController() 
@property(nonatomic, strong) UITableView *dynamicTable; 
@end 

@implementation DetailedViewControll 
-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.dynamicTable=[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; 
    //configure dynamicTable 

} 
@end 

如果我宣佈dynamicTable變量,如下使用它:

@interface DetailedViewController() 
{ 
    // private tableview variable 
    UITableView *dynamicTable; 
} 

@end 

@implementation DetailedViewControll 
-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    dynamicTable=[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; 
    //configure dynamicTable 

} 
@end 

我想用dynamicTable變量的以上兩種方式都是平等的,我說得對不對?
如果沒有,是否使用屬性比使用私有變量更好?

+1

@Krumelur不,這是不正確的。 – Fogmeister

+0

以上兩種方式都是.m文件,而不是.h文件,所以我希望它是私人的。 –

+0

Josh Caswell:你的鏈接問題不是重複的。它涵蓋了一個不同的主題:使用顯式變量支持屬性是否是個好主意。這個問題是關於變量與財產本身(儘管我確信這裏有重複的問題)。 – DarkDust

回答

0

報價從Apple docs,解釋屬性:

實事求是地講,性能降低你必須寫的多餘的代碼量。因爲大多數訪問器方法都以類似的方式實現,所以屬性無需爲類中公開的每個屬性實現getter和setter方法。相反,您可以使用屬性聲明指定所需的行爲,然後在編譯時根據該聲明合成實際的getter和setter方法。

在你的情況上面兩種方式是平等的。但是如果你想使用一些先進的技術,如惰性實例化Key-Value Observing,你肯定會需要屬性。

0

訪問變量比訪問屬性更快。然而,一個屬性給你一些優點,如鍵值觀察(另一個對象或者你的對象可以註冊一旦有人改變屬性的值通知)。使用哪一個是品味和用例的問題。

如果您在公開.h文件中聲明屬性,其他對象可以訪問它。如果你在你的公開.h文件中聲明你的變量,其他對象也可以訪問它(object->variable),但是這非常非常糟糕,不這樣做。

所以嚴格來說,你們兩個例子並不相同。然而,它們是類似的。通常使用哪一個並不重要。使用更適合你的任何一個。事實上,變量訪問速度更快並不是一個選擇其中一個的好理由,除非您測量測量結果爲並且知道某個屬性導致了性能問題(我還沒有看到這一點,並且我正在開發需要多媒體應用程序要快)。