构造方法:用来初始化对象的方法,是个对象方法,-开头
重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
重写构造方法的注意点
1.先调用父类的构造方法([super init])
2.再进行子类内部成员变量的初始化
1.调用+alloc分配存储空间
Person *p1 = [Person alloc];
2.调用-init进行初始化
Person *p2 = [p1 init];
重写-init方法
- (id)init
{
1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性
self = [super init]; 当前对象 self
2.如果对象初始化成功,才有必要进行接下来的初始化
if (self != nil)
{ 初始化成功
_age = 10;
}
3.返回一个已经初始化完毕的对象
return self;
}
- (id)init
{
if ( self = [super init] )
{ 初始化成功
_age = 10;
}
3.返回一个已经初始化完毕的对象
return self;
}
每个Person对象创建出来,他的_age都是10
Person *p4 = [[Person alloc] init];
二:
自定义构造方法的规范
1.一定是对象方法,一定以 -开头
2.返回值一般是id类型
3.方法名一般以initWith开头
- (id)initWithName:(NSString *)name andAge:(int)age;
- (id)initWithName:(NSString *)name andAge:(int)age
{
if ( self = [super init] )
{
_name = name;
_age = age;
}
return self;
}
@interface Student :Person
@property int no;
- (id)initWithNo:(int)no;
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no;
@end
父类的属性交给父类方法去处理,子类方法处理子类自己的属性
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
{
将name、age传递到父类方法中进行初始化
if ( self = [superinitWithName:name andAge:age])
{
_no = no;
}
return self;
}