2012-05-24 37 views
2

所以它說的準則:Objective-C的編碼規則

對於代碼,將iOS上運行的唯一的,使用自動合成實例變量是首選。

合成實例變量時,請使用@synthesize var = var_;因爲這可以防止意外調用var = blah;當self.var = blah;打算。

// Header file 
@interface Foo : NSObject 
// A guy walks into a bar. 
@property(nonatomic, copy) NSString *bar; 
@end 

// Implementation file 
@interface Foo() 
@property(nonatomic, retain) NSArray *baz; 
@end 

@implementation Foo 
@synthesize bar = bar_; 
@synthesize baz = baz_; 
@end 

的問題是,這是否適用於公共變量只或私人的嗎?關於文檔還不是很清楚,但是想知道爲什麼「如果」這個只適用於公共或私人?我認爲這是很有道理的所有公共/私有,這樣你不要弄亂實例變量和使用屬性

+0

在一個側面說明...爲什麼你會擁有公共實例變量? –

+0

這些不是「私人」艾滋病毒,他們只是不公開可見......我認爲一致性是你的朋友。也僅僅因爲某些東西不是公開可見的,並不能免於你直接意外地訪問某些東西,所以它當然適用於兩者。 –

+0

@ Paul.s,那些肯定是私人ivars。巴斯特的財產是公開隱形的「私人」財產,但支持伊娃的財產只是簡單的私人財產。 –

回答

1

我不認爲它特別事項有關的變量是公共的還是私人的。以不同的名稱進行合成的做法會在您直接訪問變量而不是使用生成的訪問器方法時使其明確。

或許有一個不同的問題基本你問:通常我已經通過訪問或直接訪問專用高德?我認爲大多數熟練的iOS開發人員傾向於使用訪問器,除非有某些特殊原因不能(性能,避免像KVO等副作用)。這樣做是更有前途的,並允許在底層實現中的靈活性。以非常小的方式,您正在編寫一個接口而不是一個實現。

它也可能是值得指出的是,鏘的默認行爲是要在將來改變,使財產後盾的ivars合成默認命名_foo。顯然,考慮考慮強調ivars是最佳實踐的權力。

0

我敢肯定的多少可以歸結爲個人喜好,所以這裏是我的,因爲他們值得:

  • 我喜歡區分公共屬性和「私人」實例變量。
  • 除了初始化(以及出於顯而易見的原因,在手動創建的訪問器方法內),屬性總是通過它們的訪問器進行訪問。因此,支持ivar中的下劃線是有用的,在我日常使用這些屬性時不是真正的問題。
  • 實例瓦爾用於保存了在方法中內部使用的狀態,但不(直接地)通過其他類。
  • 我非常喜歡在.m文件中聲明我的實例變量。乾淨而簡單(不需要在.h和.m之間來回切換以聲明ivars)。
  • 我發現,這種區別可以幫助我清楚我的腦海裏確定一個屬性是外面的東西代理應該得到和/或直接設置(在.H屬性),或者如果它是真的只是一個幫助,讓我的方法實現工作(在.m的伊娃)。

我同意Paul.s.一致性是你的朋友,但對我來說,區別也是朋友。

+0

你的區別是調用不同的名稱相同的東西。無論在哪裏聲明,屬性都是屬性。 ivar是後援商店,通常是用@synthesize或花括號爲你生成的。 –