• -协议和归档




    一、协议
    【认识协议】
        1、从生活角度
                就业协议、贷款协议、租赁协议、保密协议、……
                协议就是约束遵从协议的人的行为
        2、从编程角度
                程序中的协议是约束遵从协议的对象的行为
                规定遵从协议的对象的接口(方法)

    【协议语法】
        声明协议
        @protocol WriteCodeProtocol <NSObject>
      - (void)writeCodeUseOC;
      @end
        遵从协议
        @interface JYMonkey : NSObject<WriteCodeProtocol>
        遵从多个协议
            <协议1,协议2>

        1、一个类遵从了协议,需要实现协议中规定的方法;
                一个类遵从了协议,该类的对象也就遵从了协议。
        2、遵从协议的id指针,只能指向遵从协议的对象
        3、遵从协议的id指针,只能调用协议中规定的方法    
        4、协议中的方法有两类
                @required(必需实现的)
                @optional(选择实现的)

    【协议作用】
        1、统一接口(类似于继承)
        2、模拟实现多继承
        3、实现委托代理(明天讲)

    二、归档(archive)
    【认识归档】
        1、归档就是将对象按照特定的顺序写入到文件中,
                以便以后再次从文件中读取对象。
        2、解档就是从已经归档的文件中读成对象的过程
        3、进行归档的对象所属的类必需遵从NSCoding协议,
                必需实现协议中规定的方法
    - (void)encodeWithCoder:(NSCoder *)aCoder;
    - (id)initWithCoder:(NSCoder *)aDecoder;
        4、进行归档的对象的子对象也要遵从NSCoding,
                也要实现协议中规定的方法,否则归档会失败

    【归档使用】
      1、系统类的归档,见【系统类的归档】
    BOOL ret = [NSKeyedArchiver archiveRootObject:dic toFile:PATH];
    id obj = [NSKeyedUnarchiver unarchiveObjectWithFile:PATH];
      2、自定义类归档,见【自定义类归档】
    - (void)encodeWithCoder:(NSCoder *)aCode
    {
        [aCode encodeObject:_className forKey:@"className"];
        [aCode encodeObject:_student forKey:@"student"];
    }
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        if (self = [super init]) {
            _className = [aDecoder decodeObjectForKey:@"className"];
            _student = [aDecoder decodeObjectForKey:@"student"];
        }
        return self;
    }

    JYClass:<NSCoding>
    className(NSString)
    student(JYStudent)

    JYStudent:<NSCoding>
    name
    age
    grade
    number
            JYClass
             /          
            /              
    className      student(JYStudent)
    (NSString)          /          |            
                     /         |              
                name  age grade number
    练习:
    1、完善自定义类归档的例子,要求班级类中可以存储多个学生
    2、完成动物园类的归档,要求:
        动物园类:
                成员变量:园名、存放动物的数组
                成员方法:添加动物、按身高排序、展示所有动物
        动物类:老虎、狮子、大象、猴子、长颈鹿
                成员变量:名字、年龄、身高、体重
                成员方法:根据需要添加


  • 相关阅读:
    快乐来源的研究
    这可能是经历中真实的农村
    golang入门到实战教程
    免费开源pdf阅读器SumatraPDF
    农村题材光棍儿
    在线头像卡通化
    微软出品电脑管家
    刚毕业的大学生、失业的父亲:父子返乡
    ApplicationEventPublisher的简单使用
    mysql里使用JSON_EXTRACT取值
  • 原文地址:https://www.cnblogs.com/rainwz/p/4589093.html
Copyright © 2020-2023  润新知