Separate Interface and Implementation Files
即頭文件與源代碼文件分開,這一風格C++也有。
在Objective-C中聲明一般寫在.h文件中,而定義寫在.m文件中。
同樣包含頭文件的可以是<>也可以是””,這一點完全和C++是一樣的,前者首先在系統頭文件中搜索,后者在用戶頭文件中搜索。
類中的@implementation部分包含的是類的私有信息,這包括類的成員變量和類的實現代碼。
Synthesized Accessor Methods
Objective-C中有專門的屬性一說,即,通過@porperty標識的實例變量,它位于類的@interface中,如下圖所示:
一旦你這樣做了就無需另在@implementation中再次聲明實例變量了。
然后在類的@implementation中用@synthesize來對@property中的變量加以限定就可以讓XCode自動產生出它們的存取器(getter和setter)。如下圖所示:
其實你不寫@synthesize部分也能讓編譯器自動產生存取器,只不過這樣產生的存取器名字前面有個下劃線。
我在想這樣編譯器自動產生存取器會不會造成數據的不安全,當然你可以選擇不寫@property部分。
Accessing Properties Using the Dot Operator
所以可以看出在Objective-C類中的實例成員通常被稱作屬性。
想獲取某屬性成員的值,你可以以以下方式寫出來:
如果用存取器的話,你可以如下寫出來:
這個其實就是getter的變種,同樣,也有setter的變種,如下所示:
這個你也可以寫成非存取器的方式:
普通的方法你也可以點出來,如下圖所示:
但是不推薦這樣寫,因為這種寫法是存取屬性專用,這種風格可以讓你的代碼涇渭分明。
Multiple Arguments to Methods
Objective-C中的多參數的方法的聲明式很奇怪,如下所示:
它這個方法的名字不只一個,除了一個setTo還有一個over,然后每個名字后面跟了一份冒號,冒號后面是形參的類型和名稱。可以看出有多少個冒號就有多少個形參。這種形式的方法可以簡寫成setTo:over:它的實現如下所示:
它的使用方式如下所示:
Methods without Argument Names
上述這種寫法是可選的,因為整個方法名變成了一條消息語句,而不是單單一個名詞而已,這樣可讀性比較強,不過我個人不太習慣,Objective-C允許你按下面這種方式寫:
這種方法的調用方式如下所示:
像這樣的方法可以簡單寫成set::以表示它有兩個參數。
Local Variables
未被初始化的對象默認會被初始化為nil。
Method Arguments
有關函數傳參,針對于內置類型而言,這個參數傳遞機制是值傳遞。
而對于對象而言則是傳遞引用。
The static Keyword
static變量沒有必要初始化,因為它默認就是0。
The self Keyword
這是Objective-C中的新關鍵字,它的作用有點像this指針,即,對象實例自身。
你可以用它引用該實例自身的方法,這個方法被稱為消息的接收方。
用法如下:
實例如下:
Allocating and Returning Objects from Methods
和C++語言不同,Objective-C中的函數返回對象時該對象并不是一個臨時對象,而C++在返回對象時是返回一個臨時對象,當這個臨時對象被賦給目標左值對象后就被銷毀。
Objective-C中函數返回對象時其實是把該對象的存儲地址返回給了目標左值對象,更確切地說是個指針,這個行為有點像C++中的右值引用。