对象初始化的两种基本方法;[[类名 alloc] init]和[类名 new]
基本初始化
所有类都可以调用alloc类方法来分配内存,当程序调用某个类的alloc类方式时,系统会完成1.位该对象的所有实例变量分配内存空间2.将每个实例变量的内存空间都重置为0:所有的整形变量所在空间都重置为0,所有的浮点类型变量重置为0.0,所有的boolL类型变量都重置为NO,所有的指针类型变量都重置为nil。
使用alloc方式只是为对象分配空间,使用还必须进行初始化。
从功能上object-c的初始化方法和Java的构造器基本相同。Java在对象实例化时虽然只需要new,但是其也分为分配内存和初始化对象两部分
重写初始化方法实现对属性的目标初始化
#import<Foundation/Foundation.h>
@interface User;NSObject
@property (nonautomic,copy)NSString* name;
@property(nonautomic,assign)int age;
@property(nonautomic,copy)NSString* address;
@end
#import “User.h”
@implementation User
-(id) init{
//重写父类的init方法
//调用父类的init方法进行初始化,将初始化得到的数值数值给self,如果self不为nil则表示初始化成功
if(self=[super init]){
self->_name=@"jack";
self->_age=20;
self->_address=@"shang hai"
}
return self;
}
@end
带参数的初始化
#import <Foundation/Foundation.h>
interface Car:NSObject
@property (nonatomic,copy) NSString* brand;
@property (nonatomic,copy)NSString* model;
@property(nonatomic,copy)NSString* color;
//定义带参数的初始化方法
-(id) initWitnBrand:(NSString*) brand model:(NSString*) model;
-(id) initWitnBrand:(NSString*) brand model:(NSString*) model color:(NSString*) color;
@end
#import "Car.h"
@implementation Car
-(id) init{
if(self=[super init]){
self->_brand=@"BMW";
self->_model=@"a1";
self->_color=@"blue";
}
return self;
}
-(id) initWitnBrand:(NSString*) brand model:(NSString*) mode{
self->_brand=brand;
self->_model=model;
self->_color=@"blue";
}