Objective-C(10)抽象父類---協議

來源:互聯網
上載者:User

標籤:objective-c   ios   xcode   對象   類   物件導向   

  • 協議的定義與使用

什麼是協議?

     可以用來聲明一大堆方法(不能聲明成員變數)

     只要某個類遵循了這個協議,就相當於擁有了這個協議中的所有方法聲明

     只要父類遵守了某個協議,就相當於子類也遵守了

添加協議標頭檔:Objective-C File —> protocol

    

協議類似於Java中的介面,類似於C++中的抽象類別

     

定義協議:

@protocol 協議名 <父協議名1, 父協議名2, ...>…     //方法聲明列表@end


協議中的方法的限定:

     @required     其後的方法要求在具體的類中必須實現

     @optional     其後的方法要求在具體的類中選擇實現

遵循協議:

@interface 類名 : 父類 <協議名1, 協議名2, ...>… //@end


協議也可以遵守協議,相當於對現有協議的擴充


基協議NSObject:

     該協議中聲明了如記憶體管理等基本方法,自訂協議一定要遵循這個基協議

類的對象屬性(複合的)需要指明該屬性遵循哪些協議:

@property (nonatomic, strong) 類名<協議名> * 屬性名稱;@property (nonatomic, strong) id<協議名> 屬性名稱;

     也就是說,類名<協議名> 才表示一個確定的類型

     協議可定義在單獨的.h檔案中,也可以定在某個類的檔案中


  • NSCopying協議

建立對象副本 ,使用copy或mutablecopy方法建立一個對象的副本

- (id) copy          - (id) mutableCopy


淺複製

     指標的拷貝,來源物件和副本對象指向同一個對象

     對象的引用計數+1,相當於做了一次retain。(記憶體管理)

深複製

     內容的拷貝,來源物件和副本對象指向不同的對象

     來源物件的引用計數不變,副本的引用計數為1

對象若想要調用copy方法必須遵循NSCopying協議,並實現方法:

- (id)copyWithZone:(NSZone *)zone

     如:

- (id) copyWithZone:(NSZone *) zone {    AMPerson * p = [[[self class] allocWithZone:zone] init];    p.age = self.age;    p.name = [self.name copy];    return p;}


對象若想要調用mutableCopy方法必須遵循NSMutableCopying協議,並實現方法:

- (id)mutableCopyWithZone:(NSZone *)zone


  • NSCoding協議

NSKeyedArchiver歸檔器

+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path+ (NSData *)archivedDataWithRootObject:(id)rootObject


NSKeyedUnarchiver解檔器

+ (id)unarchiveObjectWithData:(NSData *)data+ (id)unarchiveObjectWithFile:(NSString *)path

如果對象是NSString、NSDictionary、NSArray、NSData、NSNumber等類型,可以直接用NSKeyedArchiver進行歸檔。


如果是自訂的模型對象,模型對象需要遵循NSCoding協議,並實現方法:

- (void)encodeWithCoder:(NSCoder *)encoder- (instancetype)initWithCoder:(NSCoder *)decoder


NSCoder編碼器

     encodeWithCoder:方法中應對打算歸檔的屬性進行編碼,使用encode開頭的方法。

     initWithCoder:方法中應對歸檔中所有的資料進行解碼(到屬性),使用decode開頭的方法。


本文出自 “teacherAn” 部落格,請務必保留此出處http://annmeng.blog.51cto.com/3321237/1745627

Objective-C(10)抽象父類---協議

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.