Objective-C 2.0 新特性介紹

前言: Apple向來對產品未來方向很有感覺,它在GCC的源代碼庫中擁有自己的一個獨立分支,這些分支多數是開源的,所以對應的GCC編譯器是免費的,但Objective-C 2.0的運行庫不是免費的。


Objective-C 2.0對Objective-C的升級相當的好的, 新特性非常實用, 沒有額外增加不必要關鍵字,而今天的C++看起來更加混亂。C++模板那些概念在Objective-C這樣可以用弱類型的語言裏面看起來都是不太必要的。


根據官方文檔的介紹,Objective C 2.0主要突出了以下幾點新的特性:
    (1) 屬性(property):
        原來寫Cocoa類一個頭大的問題就是得寫N多的setter getter,尤其是遇到複雜的類時,這個工作簡直就是體力活。ObjC2.0裏提供了新的@property功能,能夠幫助程序員解除這個煩惱,不用那麼麻煩寫一堆setter and getter
          

    (2) 垃圾回收器(garbage collection):
        呵呵,終於可以不用處理內存溢出的Bug了,它是像我這樣粗心大意的人最喜歡的特性了。Objective-C 2.0加入了新的關鍵字來實現GC, 以及需要支持GC的標準庫程序。


    (3) 帶屬性的方法:
        聲明某個方法的時候, 可以指定該方法的一些屬性, 比如通過寄存器傳遞參數, 保存結果作爲方法的Cache等等,甚至聲明某個方法已經被遺棄等


    (4) 模糊接口定義
        引入了@optional 和 @required 關鍵字,  一個接口中可以同時有一定要實現的方法和可選擇實現的方法

    (5) 帶實現的接口
        Objective-C不支持多重集成, 和java一樣, 這是一個設計的考慮,但Objective-C有一種叫categories的方法可以擴展一個現有的類, 當然也可以定義接口。Objective-C2.0新的特性定義的接口可以有一個默認的實現(接口本來是不可以有實現的), 繼承這個接口類如果沒實現該方法, 就使用默認的

    (6) 著名的超級好用的 foreach ,現在 java中好象也有這個特性


下面對以上新的特性做以下詳細介紹:

(1)   屬性(property):

        ①定義屬性關鍵字:@property

②定義位置:一般在一個類的接口(@interface)內,和方法定義在一起,還可以在協議(protocol)、種類(category)中進行定義

③定義格式:@property(屬性1[,屬性2…]類型名稱(變量);  // @property ( attribute [,attribute2,…]) type name (variable );

        其中屬性(attribute)和變量(variable)可以省略,attribute默認是readwrite和assign,variable默認和類型名稱(name)是一致的,Variable必須是在interface裏定義的變量。(在64bit裏如果variable沒有定義,XCode甚至可以自動添加對應的變量)

        舉例如下:

// 在接口裏面定義屬性
@interface MyClass : NSObject
{
	NSString *value;
}
@property(copy, readwrite) NSString *value;
@end
@implementation MyClass
@synthesize value;
@end


        使用時可以通過MyClass.value來訪問value變量,property的copy屬性表明這個變量必須支持NSCopying協議。property的readwrite屬性表明這個變量的屬性可以被讀寫。

        attribute還可以是assign,Readonly,retain和nonatomic。分別表示該屬性可以被賦值、只能被讀取、保持上一次被賦的值和不自動從寄存器傳遞數值。

        attribute還可以爲assign(默認),assign就類似C的直接指針賦值,只傳遞對象內存位置,並不拷貝或者retain該對象。最典型的例子就是setDelegate:這樣的方法設置一個delegate,delegate由於是一個不由被賦值類控制的對象,所以採用assign方式賦值。

發佈了2 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章