六、oc中构造方法的学习
来源:互联网 发布:华为网络基础知识 编辑:程序博客网 时间:2024/05/02 01:32
------- <a href="http://www.itheima.com" target="blank">Windows Phone 7手机开发</a>、<a href="http://www.itheima.com" target="blank">.Ios培训</a>、期待与您交流! -------
oc中的构造方法是用来初始化对象的方法,它是一个对象方法,例如:-init方法,它是xcode中默认有的方法。调用-init方法的时候会遵循一个顺序,即是先初始化父类的成员变量(但是是先调用该类的-init方法)然后再一级一级的初始化子类的对象方法。为了能够使默认情况下某个成员变量的值不为0,为我们所需要的某个值,则常常需要重写构造方法。
重写构造方法需要注意的是,先调用父类的构造方法self = [super init],这是固定写法,初学者们,需要牢记,然后再进行子类的内部成员的初始化。同时,还必须注意,是否初始化父类对象成功,必须在初始化父类对象成功后再进行子类的内部成员的初始化。
例如:
#import "Bird.h"@implementation Person- (id)init{ self = [super init]; if(self != nil) // 如果对象初始化成功,才有必要进行接下来的初始化 { _age = 10; // 初始化成功,再进行所需要的初始化赋值 } // 或者可以写成下面这样的形式 if (self = [super init]) // 将右边赋值给左边,左边如果不等于空,则执行if语句 { _age = 10; } return self;}@end
上面代码,若调用一个Person类的对象,并且在不给_age赋新值的情况下,打印对象的_age的成员变量,则变量的值为10,这就说明初始化成功。
还需要注意的时,在有继承关系的时候,子类在重写构造方法时,要注意父类中成员变量的类型,是私有、公有、还是保护类型。
除了-init这类系统自带的方法,某些情况下,还需要程序员们自己编写一些常用的用户自定义的初始化方法,我们把这种方法叫做自定义构造方法。自定义构造方法需要注意的有,首先,它一定是对象方法,以 - 开头,其次返回值一般是id类型,方法名一般以initWith开头。
例如:
Person类的声明:
- (id)initWithName:(NSString *)name;- (id)initWithAge:(int)age;- (id)initWithAge:(int)age andName:(NSString *)name;Person类的实现:
- (id)init{ if (self = [super init]) { _name = @"谭伟华_2015"; } return self;}- (id)initWithName:(NSString *)name{ if (self = [super init]) { _name = name; } return self;}- (id)initWithAge:(int)age{ if (self = [super init]) { _age = age; } return self;}- (id)initWithAge:(int)age andName:(NSString *)name{ if (self = [super init]) { _age = age; _name = name; } return self;}Student类继承Person类,Person类中拥有_age与*_name的成员变量,Student类中拥有_no的成员变量
- (id)initWithNo:(int)no{ if (self = [super init]) { _no = no; } return self;}
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no{ if (self = [super initWithAge:age andName:name]) { //调用[super initWithAge:age andName:name]会回到Person类中去调用相应方法,初始化_age与_name _no = no; } return self;}上面那样写的好处,可可以使父类的属性交给父类的方法去处理,子类方法处理子类的属性。
main函数:
#import <Foundation/Foundation.h>#import "Person.h"#import "Student.h"int main(){ Student *s = [[Student alloc]initWithName:@"twh" andAge:24 andNo:1991]; NSLog(@"_name = %@ _age = %d _no = %d",s.name,s.age,s.no); return 0;}程序执行的结果为:
综上所述,-init构造方法,可以使我们改变某个或者某些成员变量的初始值。自定义构造方法,可以更加灵活并且更加直观可读的实现-init方法的功能。
- 六、oc中构造方法的学习
- OC语言学习 (六) 继承、多态,构造方法,description方法
- OC的构造方法
- OC中得构造方法
- OC构造方法的使用
- OC学习笔记之init构造方法
- OC中重写构造方法及自定义构造方法
- OC学习笔记之OC类自定义构造方法
- OC -基础(六) 学习中。。。
- 【黑马程序员】-我的OC学习笔记(3)-存取器方法和构造方法重写
- OC-020.OC的构造方法-01基础
- OC中实例变量初始化方法,setter方法以及便利构造器的不同
- OC学习那点事:构造方法和description方法
- OC学习2——构造方法和description方法
- OC学习:重写构造方法和description方法
- OC语言学习02-构造方法与类方法
- OC构造方法、Category
- OC语言构造方法
- 在IIS6.0中无法下载的问题
- 【Visual C++】游戏编程学习笔记之三:游戏循环的使用
- Android中状态栏的隐藏
- 广义线性模型与Logistic回归
- 代理模式
- 六、oc中构造方法的学习
- cocoaPods 使用
- 名字就是一切:我的一点经历和经验,公司名、域名、网名、姓名
- Unity5新的AssetBundle系统使用心得
- Bootstrap Carousel(轮播插件)
- 2015-03-11--数据结构开始
- hdu 1002 A + B Problem II
- 查找数组中出现次数超过一半的数字
- Largest number,leetcode