OC语言构造方法
一、构造方法
完整的创建一个可用的对象:Person *p=[Person new];
New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象);2)使用 init方法来对对象进行初始化。
可以把new方法拆开如下:
1.调用类方法+alloc分配存储空间,返回未经初始化的对象
Person *p1=[person alloc];
2.调用对象方法-init进行初始化,返回对象本身
Person *p2=[p1 init];
3.以上两个过程整合为一句:
Person *p=[[Person alloc] init];
说明:init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,一减号开头。默认初始化完毕后,所有成员变量的值都为0。
举例说明:以下代码示范了一个使用调用对象的方法的便利构造器
首先建立一个名为Student的类文件
在声明文件中(.h):
#import <NSObject>
@interface Student : NSObject
//通过属性的方法声明name,sex,hobby,age等四个实例变量:
@property(copy,nonatomic)NSString*name,*sex,*hobby;
@property(assign,nonatomic)int age;
//声明一个调用对象的方法的便利构造器
-(id)initWithName:(NSString *)n andSex:(NSString *)s andHobby:(NSString *)h andAge:(int)a;
//声明一个输出信息的方法
-(void)Message;
@end
2.在实现文件中(.m)
#import "Student.h"
@implementation Student
//合成声明的实例变量:
@synthesize name,sex,hobby,age;
//实现对象调用方法:
-(id)initWithName:(NSString *)n andSex:(NSString *)s andHobby:(NSString *)h andAge:(int)a
{
//self指的是类对象本身
//super指的是父类的对象本身
self=[super init];//通过父类初始化自身
if (self)//判断自身对象是否可用(判断self是否非空)
{
self.name=n;
self.sex=s;
self.hobby=h;
self.age=a;
}
return self;//返回对象本身
}
//实现输出信息的方法
-(void)Message
{
NSLog(@"大家好,我叫%@,性别:%@,喜欢%@,今年%d岁了!",name,sex,hobby,age);//打印出定义的实例变量
}
@end
3.在主函数文件中:
#import <Foundation/foundation.h>
#import "Student.h"//引入头文件
int main(int argc, const char * argv[])
{
@autoreleasepool {
//实例化一个对象,并用-(id)方法进行赋值:
Student *stu=[[Studentalloc]initWithName:@"Jhon" andSex:@"girl"andHobby:@"阅读" andAge:20];
//调用输出信息的方法:
[stu Message];
}
return 0;
}
输出结果:
大家好,我叫Jhon,性别:girl,喜欢阅读,今年20岁了!
构造方法使用注意
(1)子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候应该首先对从父类 继承而来的成员变量先进行初始化。
(2)原则:先初始化父类的,再初始化子类的。
(3)重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。
(4)注意点:#1先调用父类的构造方法[super init]; #2再进行子类内部成员变量的初始化。
自定义构造方法的规范
(1)一定是对象方法,以减号开头
(2)返回值一般是id类型
(3)方法名一般以initWith开头
一、构造方法
完整的创建一个可用的对象:Person *p=[Person new];
New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象);2)使用 init方法来对对象进行初始化。
可以把new方法拆开如下:
1.调用类方法+alloc分配存储空间,返回未经初始化的对象
Person *p1=[person alloc];
2.调用对象方法-init进行初始化,返回对象本身
Person *p2=[p1 init];
3.以上两个过程整合为一句:
Person *p=[[Person alloc] init];
说明:init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,一减号开头。默认初始化完毕后,所有成员变量的值都为0。
举例说明:以下代码示范了一个使用调用对象的方法的便利构造器
首先建立一个名为Student的类文件
在声明文件中(.h):
#import <NSObject>
@interface Student : NSObject
//通过属性的方法声明name,sex,hobby,age等四个实例变量:
@property(copy,nonatomic)NSString*name,*sex,*hobby;
@property(assign,nonatomic)int age;
//声明一个调用对象的方法的便利构造器
-(id)initWithName:(NSString *)n andSex:(NSString *)s andHobby:(NSString *)h andAge:(int)a;
//声明一个输出信息的方法
-(void)Message;
@end
2.在实现文件中(.m)
#import "Student.h"
@implementation Student
//合成声明的实例变量:
@synthesize name,sex,hobby,age;
//实现对象调用方法:
-(id)initWithName:(NSString *)n andSex:(NSString *)s andHobby:(NSString *)h andAge:(int)a
{
//self指的是类对象本身
//super指的是父类的对象本身
self=[super init];//通过父类初始化自身
if (self)//判断自身对象是否可用(判断self是否非空)
{
self.name=n;
self.sex=s;
self.hobby=h;
self.age=a;
}
return self;//返回对象本身
}
//实现输出信息的方法
-(void)Message
{
NSLog(@"大家好,我叫%@,性别:%@,喜欢%@,今年%d岁了!",name,sex,hobby,age);//打印出定义的实例变量
}
@end
3.在主函数文件中:
#import <Foundation/foundation.h>
#import "Student.h"//引入头文件
int main(int argc, const char * argv[])
{
@autoreleasepool {
//实例化一个对象,并用-(id)方法进行赋值:
Student *stu=[[Studentalloc]initWithName:@"Jhon" andSex:@"girl"andHobby:@"阅读" andAge:20];
//调用输出信息的方法:
[stu Message];
}
return 0;
}
输出结果:
大家好,我叫Jhon,性别:girl,喜欢阅读,今年20岁了!
构造方法使用注意
(1)子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候应该首先对从父类 继承而来的成员变量先进行初始化。
(2)原则:先初始化父类的,再初始化子类的。
(3)重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。
(4)注意点:#1先调用父类的构造方法[super init]; #2再进行子类内部成员变量的初始化。
自定义构造方法的规范
(1)一定是对象方法,以减号开头
(2)返回值一般是id类型
(3)方法名一般以initWith开头