zoukankan      html  css  js  c++  java
  • 二.初始化方法

     1.继承

    ①继承既能保证类的完整,又能简化代码
    ②简化代码
    ③把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法即可。
    ④继承的特点:
    《1》没有父类的类称为根类,OC中的根类是NSObject(祖宗)
    《2》继承的上层:父类,继承的下层:子类
    《3》继承的内容:所有的实例变量和方法
    《4》继承是单向的,不能相互继承
    《5》继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为
    《6》如果子类不满意父类方法的实现,可以重写父类的方法。
    ⑤重写从父类继承过来的方法的三种情况:
    《1》完全以子类的实现内容为主,丢弃父类实现的内容
    《2》完全以父类的实现内容为主,没有子类实现的内容
    《3》既有父类对该方法的实现,也有子类对该方法的实现
    ⑥继承中方法的执行
    《1》查找本类中是否实现(重写)study方法
    《2》如果没有,查找父类中study是否实现
    《3》逐级向上查找,找到即执行
    《4》如果NSObject也没实现,会抛出异常,引起Crash
    ⑦子类定义了除父类中公共实例变量之外的实例变量
    2.super(不是指针)
    ①作用:给super发消息,可以执行父类该方法的实现
    3.self(指针)
    ①系统关键字。self在方法中指代当前方法的调用者
    ②self在实例方法中,指代调用当前方法的对象
    ③self在类方法中,指代当前类
    4.初始化方法
    ①初始化方法的主要作用是:为某些实例变量赋初值
    ②初始化方法在对象的整个生命周期里只使用一次
    注:初始化方法是在对象的初始化阶段完成其实例变量的赋值操作,一个对象的初始化阶段只有一次,所以初始化方法只使用一次。
    示例:
    声明.h
    - (instancetype)initWithName:(NSString *)name;
    实现.m
    - (instancetype)initWithName:(NSString *)name Age:(NSInteger)age Score:(CGFloat)score{
       
        if (self = [super init]) {
            _name = name;
            _age = age;
            _score = score;
        }
        return self;
    }
    ③在自身的初始化方法中,优先向super发送init消息,初始化公共变量,初始化成功之后,再初始化自身特有变量,从而完成实例变量的初始化。
    ④初始化方法特征
    《1》初始化方法是“-”实例方法
    《2》id或instancetype类型的返回值
    《3》以int开头
    《4》可以带0到多个参数
    ⑤内部实现:先执行super的初始化方法,再初始化自身变量,后return self
    ⑥初始化过程:
    《1》使用super调用父类的初始化方法,用于初始化继承自父类的实例变量
    《2》初始化完成之后会返回一个地址,这个地址就是对象的地址
    《3》self是一个指针,指向自己的对象。self保存返回的地址
    《4》返回值有可能为空。如果返回值为空,就什么也不做。返回值不为空,初始化自己的实例变量
    5.指定初始化方法
    ①一个类可以有多个初始化方法
    ②虽然可以有多个初始化方法,但是一个对象只能使用一个初始化方法
    ③指定初始化方法:无论调用哪一个初始化方法都会调用的初始化方法
    ④通常会把在初始化时想做的操作全部放到指定初始化方法中,这样就无需再每一个初始化方法中都要写一遍,简化代码,方便在后期维护
    ⑤选取原则:一般选参数最多的初始化方法作为指定初始化方法
    示例:
    声明.h
    - (instancetype)initWithName:(NSString *)name;

    - (instancetype)initWithName:(NSString *)name Age:(NSInteger)age;

    - (instancetype)initWithName:(NSString *)name Age:(NSInteger)age Score:(CGFloat)score;
    实现.m
    - (instancetype)initWithName:(NSString *)name Age:(NSInteger)age Score:(CGFloat)score{
       
        if (self = [super init]) {
            _name = name;
            _age = age;
            _score = score;
        }
        return self;
    }

    - (instancetype)initWithName:(NSString *)name Age:(NSInteger)age{
        //凡是基本数据类型填0,对象、类填nil
        return [self initWithName:name Age:age Score:0];
    }

    - (instancetype)initWithName:(NSString *)name{
       
        return [self initWithName:name Age:0 Score:0];
    }
    6.便利构造器
    ①封装了对象创建过程
    内部实现:封装了alloc和初始化操作,创建对象更加方便
    ②实现方法
    《1》是“+”类方法
    《2》返回本类型的实例
    《3》方法名以类名开头
    《4》可以有0到多个参数
    示例:
    声明.h
    + (id)personWithName:(NSString *)name gender:(NSString *)gender;
    实现.m
    + (id)personWithName:(NSString *)name gender:(NSString *)gender {
        return [[Person alloc] initWithName:name
    gender:gender];
    }
    调⽤
    Person *per = [Person personWithName:@"Frank" gender:@"男"];
  • 相关阅读:
    (hdu step 7.1.2)You can Solve a Geometry Problem too(乞讨n条线段,相交两者之间的段数)
    阅读<反欺骗的艺术>思考
    顺序查找(改进)
    win7电脑那些事
    激活office 2010
    MyEclipse10安装SVN插件
    合并排序法
    希尔排序法
    直接插入排序法
    快速排序法——较优方法
  • 原文地址:https://www.cnblogs.com/good-ios/p/5173099.html
Copyright © 2011-2022 走看看