2.始化方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.始化方法相关的知识,希望对你有一定的参考价值。

继承:把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法即可。
Student类继承了Person类,将Person类中的所有实例变量和方法都继承过来了 @interface Student : Person 只要写自己独有的实例变量 @end
继承的特点:
1、没有父类的类称作根类,OC中的根类是NSObject 2、继承是单向的,不能互相继承
3、子类继承父类所有的实例变量和方法(父类中私有的实例变量也被继承,但不能被子类访问)
4、继承具有传递性
5、一个类只有一个父类,但可以有多个子类
继承的重写:(先找自己,逐级向上查找,找到即执?。) 1、如果子类不满足父类的实现可将继承父类的方法重写。
2、声明父类继承的方法,是告诉外界,该方法是重写父类的方法
3、如果本类没有重写父类过来的study方法,则执行父类的study方法,反之,执行子类重写父类的study方法
4、方法的执行,优先从本类找方法的实现
继承方法的实现:
super:是编译器指令,并非对象
作用:给super发送消息,可以执行父类该方法的实现
[super init]
技术分享
初始化方法:
1、初始化方法是对象方法即 - 方法,并且以init开头
2、初始化方法的作用是为某些实例变量进行赋值
3、一个类的初始化方法可以有多个,但是一个对象的生命周期中,初始化方法只有一次
4、id或者instancetype类型的返回值
5、可以带0或多个参数
初始化步骤:
1、向super发送初始化方法,执行父类中的初始化方法,将父类继承过来的实例变量进行初始化
2、初始化之后再将本类独有的实例变量进行初始化
3、全部实例变量初始化之后,将对象传出去
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender{
    self = [super init]; // 将父类继承过来的isa初始化
    if (self) {// 父类初始化成功之后,在执行自身的实例变量的初始化
        [self setName:name]; //        _name = name;
        [self setAge:age]; //        _age = age;
        [self setGender:gender]; //        _gender = gender;
    }
    return self;// 全部实例变量初始化之后,将对象传出去
}
初始化的原则:一般选参数最多的初始化方法作为指定初始化方法
self:系统关键字,self在方法中指代当前方法的调用者(外界执行此方法的对象),在类方法中指代类名。
技术分享
便利构造器:封装了对象创建过程
内部实现:封装了alloc和初始化操作,创建对象更加方便快捷
便利构造器是+方法
返回本类型的实例
方法名以类名开头
可以有0或多个参数
声明: + (Person *)personWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender;
实现: + (Person *)personWithName:(NSString *)name age:(NSInteger)age gender:(NSString *)gender {
    /*
    // 1、创建对象
    Person *p = [[Person alloc] initWithName:name age:age gender:gender];
    // 2、返回对象
    return p;
     */
    return [[Person alloc]initWithName:name age:age gender:gender];
}
 



以上是关于2.始化方法的主要内容,如果未能解决你的问题,请参考以下文章

将初始数据提供给片段的正确方法?

将初始数据提供给片段的正确方法?

导航上的片段生命周期重叠

如何在使用cardview的片段中初始化gridlayoutmanager?

我想在每次选择底部导航项时初始化片段

vscode 用户代码片段 vue初始化模板 Snippet #新加入开头注释 自动生成文件名 开发日期时间等内容