初学objective-c创建对象的时候总是会使用new来创建,其实objective-c中还有一种地道的创建对象的方法:[ [类名 alloc ] init].这种方法才是OC中创建对象的正统,不过效果和new是一样的,但是这种方法更能表示创建对象的实质,那就是分配内存,初始化对象。
alloc是在内存中划分一片空间,这片空间是空白的,然后通过init初始化,我们可以在初始化的时候设置一些基本属性的值,这样就不用在创建对象后再调用方法来赋值。
如果我们不重写对象的init方法的话,我们创建的对象是空的。比如以下代码:
#import
@interface People:NSObject
{
@public
}
@property NSString *age;
//-(NSString *) description;
@end
@implementation People
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
People *p=[People new];
NSLog(@"%@",p.age);
}
return 0;
}
这个时候我们得到的结果是:null,因为我们没有对init方法进行重写,所以people调用的是默认的构造方法。
如果我们对其构造方法进行重写,如下:
#import
@interface People:NSObject
{
@public
}
@property int age;
//-(NSString *) description;
@end
@implementation People
-(instancetype) init{
if (self=[super init]) {
_age=19;
}
return self;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
People *p=[People new];
NSLog(@"%d",p.age);
}
return 0;
}