A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ,。?! 中级黑马   /  2015-9-16 20:51  /  955 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

构造方法
1,什么是构造方法:
用来初始化对象的就是构造方法;是个对象方法,- 开头

2,创建对象:Person *p=[Person new];默认初始化
new方法内部做了3件事情:
(1)使用alloc方法来分配存储空间(返回分配的对象);
(2)使用init方法来对象进行初始化。
(3)返回对象的内存首地址。

可以把new方法拆开如下:
(1).调用类方法alloc分配存储空间,返回未经初始化的对象
Person *p1=[Person alloc];
(2).调用对象方法init进行初始化,返回对象本身
Person *p2=[p1 init];
(3).以上两个过程整合为一句:
Person *p=[[Person alloc] init];

注意:
alloc只是为该类分配内存空间,以存放该类的全部实例变量 。
init方法就是构造方法,是用来初始化对象的方法。


一个刚刚分配的对象并不能立即使用 ,
需要先初始化该对象,然后才能使用它 ,
如果未进行初始化, 随后可能会出现一些不可预测的行为.

默认初始化:
1,给基本数据类型的变量 初始化值为0;
2,给对象类型 初始化值为nil(值0);



三. 重写构造方法

重写构造方法的目的:
对象创建完成后,自动有一些默认值。

重写构造方法的固定格式:
- (instancetype)init{
    self = [super init];
    if (self) {
        
    }
    return self;
}

1. [super init]的作用:先调用父类的初始化方法,对从父类继承过来的成员变量进行初始化。初始化完了之后,返回我当前的对象指针。


2. 重写构造方法注意事项:
构造方法使用注意
(1)子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候 应该首先对从父类继承而来的成员变量先进行初始化。
(2)原则:先初始化父类的,再初始化子类的。
(3)重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。
(4)注意点:先调用父类的构造方法[super init]; 再进行子类内部成员变量的初始化。


3.构造方法应用场景:
如果对象中的一些属性需要在初始化的时候就需要有值, 可以使用构造方法来完成.


自定义构造方法
1. 自定义构造方法的规范
(1)一定是对象方法,以减号开头
(2)返回值一般是id类型或者instancetype类型
(3)方法名一般以initWith开头

2. 自定义构造方法的实现
- (instancetype)init
{
    self = [super init];
    if (self) {
        // 要初始化的成员变量.
        
    }
    return self;
}


3. 自定义构造方法的使用注意
(1). 自己做自己的事情
(2). 父类的方法交给父类的方法来处理,子类的方法处理子类自己独有的属性


自定义构造方法
1. 自定义构造方法的规范
(1)一定是对象方法,以减号开头
(2)返回值一般是id类型或者instancetype类型
(3)方法名一般以initWith开头

2. 自定义构造方法的实现
- (instancetype)initWithName:(NSString *)name andAge:(int)age;
{
    self = [super init];
    if (self) {
        // 要初始化的成员变量.
        _name = name;
        _age = age;
    }
    return self;
}



3. 自定义构造方法的使用注意
(1). 自己做自己的事情
(2). 父类的方法交给父类的方法来处理,子类的方法处理子类自己独有的属性


4. 使用场景
如果对象被创建的时候, 需要对里面某些属性进行初始化(设置), 这个时候就可以使用构造方法

5,instancetype和id的作为返回值的区别;
instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;

2 个回复

倒序浏览
{:2_30:}
回复 使用道具 举报
总结的真仔细,学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马