二、初始化方法

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 allocinitWithName:name
gender:gender];
}
调⽤
Person *per = [Person personWithName:@"Frank" gender:@""];
原文地址:https://www.cnblogs.com/gnhxsk/p/5168168.html