91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-20 16:04:31 來源:網絡 閱讀:591 作者:ymanmeng123 欄目:移動開發
  • 協議的定義與使用

什么是協議?

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

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

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

添加協議頭文件: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開頭的方法。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

樟树市| 金川县| 婺源县| 岳阳县| 同江市| 什邡市| 从江县| 阜宁县| 腾冲县| 睢宁县| 洪江市| 乐平市| 吐鲁番市| 资讯| 瑞昌市| 新沂市| 黔江区| 龙井市| 屯门区| 浠水县| 石景山区| 莎车县| 汉寿县| 宣汉县| 阜新| 冀州市| 龙游县| 保靖县| 东方市| 苏尼特右旗| 双鸭山市| 灌南县| 宁蒗| 永泰县| 彰武县| 且末县| 郴州市| 博罗县| 曲阜市| 刚察县| 揭阳市|