2011-03-23 58 views
3
定義屬性的最佳方式

喜是什麼 一)哪些是iPhone

@interface SViewController : UITableViewController{ 

NSString *_name; 

} 

@property (nonatomic, retain) NSString *name; 


@synthesize name = _name; 

B)

@interface SViewController : UITableViewController{ 

NSString *name; 

} 

@property (nonatomic, retain) NSString *name; 

@synthesize name; 
+0

您可以將'@synthesize Name = Name;'寫爲'@synthesize Name;'用於b) – 2011-03-23 13:49:27

回答

0

之間的差異有沒有實際的區別。這一切都歸結於變量命名約定。私有變量通常以一個下劃線('_')作爲前綴,這有助於代碼的可讀性。如果您正在與一個團隊合作,每個人都必須同意相同的命名約定,這一點很重要。只要你保持一致,你就沒有「正確的」答案。

正常情況下,變量的第一個字母是駱駝大小寫(例如firstWordLowerCase)。在你的例子中,名字應該是名字。由於它是一個讀寫屬性,我個人的偏好是不使用下劃線。如果它已被宣佈只讀,那麼我會用它。

首先是一致的。

0

每當本地變量與iVar具有相同的名稱時,方法A)避免了下面的警告。

「對象'的本地聲明隱藏了 實例變量。」

+0

通過重命名局部變量也可以避免該警告。 - (void)viewDidAppear:(BOOL)animated {}也可以用 - (void)viewDidAppear:(BOOL)viewIsAnimated {}實現,如果你有一個名爲動畫的伊娃。 – cesarislaw 2011-03-23 15:18:02

1

我更喜歡a)選項,因爲它可以防止您意外地忘記釋放或過度釋放資源。你只是總是以self.name的形式訪問你的變量,並賦值nil或autoreleased的值(如果它是一個retain屬性,如你的例子)。在這種情況下,如果您嘗試在沒有「自我」的情況下將值分配給「名稱」。你會得到一個錯誤。

2

跳過伊娃,只是有財產聲明。如果您需要私有成員和方法,請使用類擴展。

一個例子:

@interface MyObject : NSObject { 
} 

@property (nonatomic,retain) NSString *publicString; 

-(void)publicMethod; 

@end 

與實現:

#import "MyObject.h" 

@interface MyObject() 
@property (nonatomic,retain) NSString *internalString; 
-(void)internalMethod; 
@end 

@implementation MyObject 

@synthesize publicString; 
@synthesize internalString; 

-(void)publicMethod {} 
-(void)internalMethod {} 

@end 

注:一個缺點不聲明一個實例變量,只是有該屬性,是在GDB Xcode4(< = 4.0.1)調試時不會顯示屬性。編寫iOS代碼時非常煩人,因爲您還不能使用LLDB來調試iOS項目。

0

我從不再使用實例變量,除了有時在調試時,我可以看看一個值。剩下的時間我只是使用屬性並通過您在合成屬性時創建的訪問器方法訪問它們。

對於一個名爲「myVariable」的屬性,當你綜合自動獲取getter和setter方法。 getter就是你變量的名字,在這個例子中是「myVariable」,它可以這樣訪問:

someOtherVariable = [self myVariable];

setter是通過將變量名加上單詞「set」並將變量的第一個字母大寫,這就是爲什麼您必須使用camelCase創建變量的原因。這個示例中的setter看起來像這樣:

[self setMyVariable:someOtherVariable];

請注意,我使用Objective-C消息語法而不是點語法。我強烈建議這個,因爲它是Objective-C的基礎部分,我發現它更加清晰。如果你堅持使用點語法,你的getter看起來像這樣:

someOtherVariable = self.myVariable;

和你的二傳手應該是這樣的:

self.myVariable = someOtherVariable;