构造方法:用来初始化对象实例变量值的方法,是个对象方法,-开头 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
Person *p = [Person new]; new方法的内部会分别调用两个方法来完成3件事情 (1)使用alloc方法来分配存储空间(返回分配的对象) (2)使用init方法来对对象进行初始化 (3)返回对象的首地址
Person *p = [[Person alloc] init]; (1)init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,以减号开头。 默认初始化完毕后,所有成员变量的值都为0。 (2)alloc向某个类发送alloc消息的结果,为该类分配内存,以存放该类的全部实例变量,还将这块内存区域全部初始化为0
-(id/instancetype)init{ if(self = [super init]){ //为子类增加属性进行初始化
} return self; }
创建一个人的类,默认年龄是10岁 @interface Person : NSObject @property int age; @end
@implementation -(id) init{ if( self = [super init]){ _age =10; } return self; } @end 调用: Person *p = [[Person alloc] init]; NSLog(@"%d" , p.age);
自定义的构造方法: 自定义构造方法的规范 (1)一定是对象方法,以减号开头 (2)返回值一般是id(instancetype)类型 (3)方法名一定以initWith开头
@interface Person : NSObject @property int age; @property NSString * name; -(id) initWithName: (NSString *)name; -(id)initWithName:(NSString *)name andAge:(int )age; @end
@implementation -(id) initWithName: (NSString *)name{ if(self = [super init]){ _name = name; } return self; }
-(id)initWithName:(NSString *)name andAge:(int )age{ if(self = [super init ]){ _name = name; _age = age; } return self; }
@end 然后定义一个学生类,继承自Person类,并且自定义构造方法接收三个参数 @interface Student : Person @property int no; -(id)initWithName: (NSString * )name andAge:(int)age andNo:(int)no; @end
@implementation -(id)initWithName: (NSString * )name andAge:(int)age andNo:(int)no{ if(self = [super init ] ) { _name = name; _age = age; _no = no; } return self; }
@end 主程序测试: Person *p = [[Person alloc] initWithName:@"dashi"]; NSLog(@"%@",p.name);
Person *p1 = [[Person alloc] initWithName:@"dashixiong" andAge:18]; NSLog(@"%@,%d",p1.name,p1.age);
Student *p2 = [[Student alloc] initWithName:@"dashidi" andAge:10 andNo: 12]; NSLog(@"%@,%d,%d",p2.name,p2.age,p2.no);
|