Objective-C中的協議(Protocol)和類別(Category)

來源:互聯網
上載者:User

標籤:style   java   color   使用   檔案   os   

1.什麼是協議?

2.協議與類別的聲明和使用

 

1.什麼是協議?

  在Objective-C中,不支援多繼承,即不允許一個類有多個父類,但是OC提供了類似的實現方法,也就是協議。協議有點類似於Java裡的介面,不同點就是在協議裡,可以提供可選的方法,不要求全部繼承。

  協議包括正式協議和非正式協議。

  正式協議:其聲明一個方法列表,協議的實現者需要實現聲明的方法,可以使用@required和@optional關鍵字指定方法必須實現或可選實現,預設為必須實現。子類會繼承其父類採用的協議,一個協議本身也可以採用別的協議

  非正式協議(類別):類別是Objective-C的一個語言特點,可以讓你在無需子類化的前提下為一個類增加方法。凡是NSObject或其子類的類別,都是非正式協議。一個類不必實現非正式協議中的每個方法,只需實現它想要的方法就可以。聲明非正式協議的類在向某個目標對象發送協議訊息之前,必須首先向它發送respondsToSelector:訊息並得到肯定的回答,才可以使用。

2.協議與類別的聲明和使用

  正式協議的聲明很簡單,在類聲明的上方

@protocol ProtocolName

//方法聲明

@end

在另一個採納協議的類中聲明

@interface ClassName:NSObject<NSCopying>

{

//執行個體變數

}

//方法

@end

  也可以採用多個協議,只需用逗號隔開

@interface ClassName:NSObject<NSCopying,NSCoding>

{

//執行個體變數

}

//方法

@end

  聲明可選和必須實現的協議

@protocol ProtocolName
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end//MyProtocol

 

  非正式協議(類別)聲明和使用,類別名也要符合駱駝命名法。類別的聲明和實現可以放在單獨的 ”類別名.h/類別名.m“中,也可以放在已有類的.h/.m檔案中。

@interface ClassName(categoryName)

//方法定義

@end

  實現

@implementation ClassName(categoryName)
//方法實現
@end

  需要注意的是類別只能添加方法,不能添加執行個體變數。

------------------------------------------------------------------------------------------------------------------------

  不聲明類別名的時候,是匿名類別或類擴充,可以為已存在的類添加執行個體變數,方法。只能放置在已有類的.h/.m中

@interface ClassName(){

  //執行個體變數--只能在自身類內使用

}

//方法定義--在.h檔案中聲明為公開的,在.m中聲明的方法為私人的。

@end

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.