黑马程序员——OC核心语法2之构造方法
来源:互联网 发布:淘宝登陆老是要验证码 编辑:程序博客网 时间:2024/05/01 19:13
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0.概念
定义:用来初始化对象的方法,是个对象方法。 - 开头
目的:为了让对象创建出来,成员变量就拥有固定值(默认是空,0)
注意点:(1)先调用父类的构造方法(eg:[super init])
(2)再进行子类内部成员变量的初始化
1.完整的创建一个可用对象过程
(1)分配存储空间:使用 +alloc 给对象分配空间 (返回一个分配了空间的对象,但是没有初始化)
Person *p1 = [Person alloc];
(2)初始化 使用 -init 初始化对象
Person *p2 = [p1 init];
以上可以归纳为 Person *p3 = [[Person alloc] init]; // init 是个构造方法,属于NSObject类中
2. 重写init方法(构造方法)
1>范例
- (id)init // 返回值一定要是id { // 1. 一定要调用super的init方法(初始化父类的相应方法和成员变量) self = [super init]; // 返回已经初始化了的当前对象 self // 2.如果对象初始化成功,才有必要进行接下来的初始化(对变量的初始化进行赋值) if ( self ) { // 初始化成功 _age = 10; } // 3.返回一个已经初始化了的对象 return self; /* 简写: if( self = [super init]) { _age=10; } return self; */ }</span>
注:在调用时,先赋值父类成员变量,一层层往下赋值,从NSObject开始。
2> 执行过程:
解释:
第一步:调用student对象,在对student对象进行初始化的时候,会调用父类的init方法,也就是Person类的init。
第二步:初始化Person对象的init方法,会调用父类的init,也就是NSObject类的init方法。
第三步:初始化NSObject类的init方法,此方法会有个指针ISA指向Student类,NSObject类的init方法初始化完毕。
第四步:NSObject类的init方法初始化完毕后,此时Person类的init方法就会有值,Person类的init方法初始化完毕。
第五步:Person类的init方法初始化完毕后,就会初始化Student类的init方法。
注:student初始化时调用person的init方法。person初始化时调用NSObject的init方法。
赋值顺序:首先赋值ISA,然后再赋值_age,最后初始化_no(从父类开始赋值)
初始化顺序:1>先初始化父类,然后再初始化子类。但是调用的时候先调用子类的方法,再调用父类方法
2>先初始化自身的ISA,然后再初始化其它成员变量。
3.自定义构造方法
规范:(1)一定是对象方法,一定以 - 开头。(调用某个对象方法进行初始化)
(2)返回值一定是id类型
(3)方法名一般是以init开头。
(4)成员变量数量:自有成员变量加父类成员变量。(NSObject默认有成员变量ISA) eg:
- (id)initWithAge:(int)age // 设置age的初始化方法 { if (self = [super init]) // 初始化是否成功 { _age = age; } return self; } int main() { Person *p = [[Person alloc ] initWithAge:29]; // 如果初始化 成功,则age默认为29; }</span>
原则:父类的成员变量父类处理,子类的成员变量子类处理。
4.new方法和alloc、init方法区别
(1) new 是分两步来生成对象的
1> 调用+alloc 方法来给对象分配内存空间
2>调用-init 方法给对象的成员变量初始化成默认的值
缺点:不能在创建对象的同时进行一些必要的初始化值
1> 调用+alloc 方法来给对象分配内存空间
2>调用-init 方法给对象的成员变量初始化成默认的值
缺点:不能在创建对象的同时进行一些必要的初始化值
(2)alloc、init方法
优点:可以在对象初始化时,使成员变量拥有必要的初始化值
0 0
- 黑马程序员——OC核心语法2之构造方法
- 黑马程序员——OC核心语法点语法,成员变量,@property和@synthetic,构造方法
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- 黑马程序员——OC核心语法
- 黑马程序员-OC语言核心语法(2)构造方法
- 黑马程序员——[OC]核心语法2
- 黑马程序员 OC核心语法2
- 黑马程序员——oc核心语法1
- 黑马程序员——OC语言核心语法
- 黑马程序员——OC语言基础篇---核心语法
- 黑马程序员——OC-10:核心语法
- 黑马程序员——[oc]核心语法1
- 黑马程序员—OC语言基础—核心语法小结
- 黑马程序员——OC中的核心语法
- 黑马程序员——OC学习笔记04 核心语法
- 黑马程序员—04OC核心语法_01
- 黑马程序员—05OC核心语法_02
- 黑马程序员----OC核心语法
- hdu 5001 概率DP 图上的DP
- NSLayoutConstraint
- Augmenting Existing Data structure 总结
- zoj 3812
- 花生壳是干什么的,花生壳使用方法及原理,及类似端口映射应用
- 黑马程序员——OC核心语法2之构造方法
- UVa 12149 - Feynman
- 锐捷交换机批量管理脚本(Python)
- 国庆长假,你去了哪里?
- 这是什么情况哦?
- UCOSII任务挂起,删除,恢复
- 水樹 奈々 Blog 20140920 マイントピアの銅太くんとっ♪ 译文
- 多媒体方向各种会
- POJ1007-DNA Sorting-ACM