Separate Interface and Implementation Files
即頭文件與源代碼文件分開闯团,這一風格C++也有近忙。
在Objective-C中聲明一般寫在.h文件中抄罕,而定義寫在.m文件中。
同樣包含頭文件的可以是<>也可以是””弥激,這一點完全和C++是一樣的宿崭,前者首先在系統(tǒng)頭文件中搜索,后者在用戶頭文件中搜索髓削。
類中的@implementation部分包含的是類的私有信息举瑰,這包括類的成員變量和類的實現(xiàn)代碼。
Synthesized Accessor Methods
Objective-C中有專門的屬性一說蔬螟,即此迅,通過@porperty標識的實例變量,它位于類的@interface中,如下圖所示:
一旦你這樣做了就無需另在@implementation中再次聲明實例變量了耸序。
然后在類的@implementation中用@synthesize來對@property中的變量加以限定就可以讓XCode自動產(chǎn)生出它們的存取器(getter和setter)忍些。如下圖所示:
其實你不寫@synthesize部分也能讓編譯器自動產(chǎn)生存取器,只不過這樣產(chǎn)生的存取器名字前面有個下劃線坎怪。
我在想這樣編譯器自動產(chǎn)生存取器會不會造成數(shù)據(jù)的不安全罢坝,當然你可以選擇不寫@property部分。
Accessing Properties Using the Dot Operator
所以可以看出在Objective-C類中的實例成員通常被稱作屬性搅窿。
想獲取某屬性成員的值嘁酿,你可以以以下方式寫出來:
如果用存取器的話,你可以如下寫出來:
這個其實就是getter的變種男应,同樣闹司,也有setter的變種,如下所示:
這個你也可以寫成非存取器的方式:
普通的方法你也可以點出來沐飘,如下圖所示:
但是不推薦這樣寫游桩,因為這種寫法是存取屬性專用,這種風格可以讓你的代碼涇渭分明耐朴。
Multiple Arguments to Methods
Objective-C中的多參數(shù)的方法的聲明式很奇怪借卧,如下所示:
它這個方法的名字不只一個,除了一個setTo還有一個over筛峭,然后每個名字后面跟了一份冒號铐刘,冒號后面是形參的類型和名稱∮跋可以看出有多少個冒號就有多少個形參镰吵。這種形式的方法可以簡寫成setTo:over:它的實現(xiàn)如下所示:
它的使用方式如下所示:
Methods without Argument Names
上述這種寫法是可選的,因為整個方法名變成了一條消息語句俯艰,而不是單單一個名詞而已捡遍,這樣可讀性比較強,不過我個人不太習慣竹握,Objective-C允許你按下面這種方式寫:
這種方法的調(diào)用方式如下所示:
像這樣的方法可以簡單寫成set::以表示它有兩個參數(shù)画株。
Local Variables
未被初始化的對象默認會被初始化為nil。
Method Arguments
有關函數(shù)傳參啦辐,針對于內(nèi)置類型而言谓传,這個參數(shù)傳遞機制是值傳遞。
而對于對象而言則是傳遞引用芹关。
The static Keyword
static變量沒有必要初始化续挟,因為它默認就是0。
The self Keyword
這是Objective-C中的新關鍵字侥衬,它的作用有點像this指針诗祸,即跑芳,對象實例自身。
你可以用它引用該實例自身的方法直颅,這個方法被稱為消息的接收方博个。
用法如下:
實例如下:
Allocating and Returning Objects from Methods
和C++語言不同,Objective-C中的函數(shù)返回對象時該對象并不是一個臨時對象功偿,而C++在返回對象時是返回一個臨時對象盆佣,當這個臨時對象被賦給目標左值對象后就被銷毀。
Objective-C中函數(shù)返回對象時其實是把該對象的存儲地址返回給了目標左值對象械荷,更確切地說是個指針共耍,這個行為有點像C++中的右值引用。