二.初始化方法

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:@"男"];

时间: 2024-08-08 01:25:24

二.初始化方法的相关文章

Objective-C( 继承,初始化方法)

一.继承 1.继承的上层:父类,继承的下层:子类 2.继承是单向的 3.继承具有传递性:子类继承父类的特征和行为 4.子类扩展父类,更加具体 oc中的继承 1.oc中的继承,即一个类继承另一个类: 2.被继承的类称为父类或超类: 3.继承的类为子类 继承的特点 1.oc中只允许单继承 2.没有父类的类称为根类.oc中的根类是  NSObject 3.继承的内容:除了私有变量外的所有实例变量和方法 4.子类可以重写父类的方法 super 1.oc中的关键字 2.作用:给super发送消息,可执行父

Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义

初学OC.对init这种方法不是非常了解.我们如今来分别对init方法进行重写以及自己定义,来加深对他的了解. 本样例也是用Person类来进行測试. (一)重写init方法. (1)在Person.h中声明init方法: -(instancetype)init; (2)在Person.m中声明成员变量.以及写一个打印成员变量的函数,而且重写init初始化方法:在重写的方法中.对成员变量进行了赋值.注意,这个init方法是无參数的方法. { NSString *_peopleName; int

2015 IOS 学习笔记 面向对象 初始化方法 ——蓝懿教育

今天学习了面向对象以及初始化方法,这个在实际应用中比较重要,也比较抽象,所以要具体在实例中才能理解. ————————面向对象有三大特性—————— 一.封装 封装是对象和类概念的主要特性.它是隐藏内部实现,稳定外部接口,可以看作是“包装”.封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 好处:使用更简单变量更安全可以隐藏内部实现细节开发速度加快 OC中一个类可以继承另一个类,被继承的类成为超类(superclass),继承的

数组的初始化方法

//数组的初始化方法 # include<stdio.h> # include<stdlib.h> int main() { int a[3][4]; int num = 0; //方法一: /* for (int i = 0; i < 3 * 4; i++) { a[i / 4][i % 4] = num; num++; } */ //方法二: /* printf("start...\n"); for (int *p = &a[0][0]; p

oc知识点 初始化方法

一继承 继承是面向对象编程的三大特性之一 ,继承既能保证类的完整,又能简化代码 1 没有父类的类称为根类 oc中的根类NSObject 2继承内容:所有的实例变量和方法 3继承是单向的,不能相互继承 4继承具有传递性 5如果子类不满意父类的方法实现可以重写父类的方法 二 super self super 是编译器指令,并非对象    给super发消息可以执行父类方法的实现 self 是系统关键字 self在方法中指带当前的调用者 三 初始化方法 创建对象分为两步: 1为对象开辟空间 2进行初始

js jquery 页面加载初始化方法

一.js页面加载初始化方法 // 1.在body里面写初始化方法. <body onload='init()'> </body> <script type="text/javascript"> function init(){ // 初始化内容 } </script> // 2.window.onload=function(){} <script type="text/javascript"> window

html页面加载初始化方法

js: 方法一: window.onload=function(){内容} 方法二(自己定义方法): function onload(){内容} onload(); jQuery: 方法一: $(document).ready(function(){内容}); 方法二: $(function(){内容}); 方法三: jQuery(function($){内容}); 注意:由于jquery使用$符号,这样和有些组件 ,例如dwr就有冲突,为了解决这个问题,可以使用:var j = jQuery.

Objective-C 中便利初始化方法和指定初始化方法

初始化 之 便利初始化和指定初始化 便利初始化方式 便利初始化方式一 -(id) initWithFormat:(NSString *) format,...; 初始化了一个新的字符串作为格式化操作的结果. 下面就是一个小例子 //按格式返回字符串 NSString *myString = [[NSString alloc] initWithFormat:@"myString has %d letter",8]; NSLog(@"%@",myString); 其结果

Objective-C学习笔记_继承、初始化方法、便利构造器

一.继承 继承的上层:父类,继承的下层:子类.继承是单向的,不能相互继承.继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和?为.子类能继承父类全部的特征和行为. 例题 打僵尸.需求: 1.定义普通僵尸类: 实例变量:僵尸总血量.僵尸每次失血量. 方法:初始化方法(总血量).被打击失血.死亡. 2.定义路障僵尸类: 实例变量:僵尸总血量.僵尸每次失血量,道具,弱点. 方法:初始化方法(总血量).被打击失血.失去装备.死亡. 3.定义铁桶僵尸类: 实例变量:僵尸总血量.僵尸每次失血量,道