您的位置:首页 > 其它

【OC学习-7】2种常用的对象初始化方法以及方法的具体写法

2014-09-02 20:38 531 查看
我们在创建一个新的对象时,用到初始化,但由于这个初始化函数没有特别编写,所以没什么效果,现在我们就来看看这个初始化函数怎么书写。

如果没有经过我们自己的初始化函数赋值的话,那么一般在创建一个对象后,会一个个赋值,如下:

#import <Foundation/Foundation.h>
#import "ASStudent.h"
int main(int argc, const char * argv[])
{

@autoreleasepool {

ASStudent * zhang=[[ASStudent alloc]init];
[zhang setName:@"tom"]; //通过setName函数赋值
[zhang setAge:18]; //通过setAge函数赋值
NSLog(@"%@,%d",[zhang name],[zhang age]);
}
return 0;
}

有了初始化之后,有些变量的值在创建时就可以指定。
(1)用init函数初始化——因为是直接从父类继承过来的,所以不需要在.h文件声明,可直接在.m里面写内容

//上面alloc给对象分配空间后,就开始初始化,发现有如下的初始化函数,则调用如下函数
-(id)init{
if (self=[super init]) { //用父类初始化函数初始化继承父类的变量,并把这个地址赋值给self
name=@"tom";
age=18;
}
return self; //最终还是返回一个地址
}

(2-1)还有一种常用的方法,是先定义一个初始化变量最多的指定初始化函数,不指定变量值,在创建对象时再指定具体值——需要先在.h里声明,然后在.m中写内容,和写普通函数(方法)类似
//在ASStudent.h里先声明
-(id)initWithName:(NSString *)aName Sid:(NSString *)aSid Age:(int)aAge;
//然后在ASStudent.m里写具体内容
//格式和init一致,只不过多了几个形参
-(id)initWithName:(NSString *)aName Sid:(NSString *)aSid Age:(int)aAge{
if (self=[super init]) {
name=aName;
sid=aSid;
age=aAge;
}
return self;
}

//最后在main.m中创建对象的时候就初始化赋值,即可
ASStudent * zhang=[[ASStudent alloc]initWithName:@"andy" Sid:@"110" Age:19];

(2-2)在上面指定初始化函数的基础上,可以衍生出拥有不同参数的初始化函数,这样以后需要用哪个初始化函数就可以随意用。——需要先在.h里声明,然后在.m中写内容,和写普通函数(方法)类似

//ASStudent.h里,只初始化一个参数的函数(方法)
-(id)initWithName:(NSString *)aName;
//ASStudent.m写具体内容
//这里面调用了上面有三个参数的指定初始化函数,只不过把里面的其中一个参数Name的赋值权利给了我们下面的这个函数
-(id)initWithName:(NSString *)aName{
return [self initWithName:aName Sid:nil Age:25];
}

//当然,在main.m里初始化也是调用新的初始化函数(方法)
ASStudent * zhang=[[ASStudent alloc]initWithName:@"jack"];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐