------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
OC中得构造方法
1)构造方法是一个初始化对象的方法,是一个对象方法
2)重写构造方法,是为了在创建对象时,给成员变量赋一个我们需要的值
我们在创建一个对象的时候,会用到 new 这个方法,例如:创建一个Person类的对象
Person *p = [Person new];
当我们执行new的时候,系统会默认为我们做三件事
1)使用alloc方法分配存储空间(返回分配的对象)
2)使用init方法对对象进行初始化
3)返回对象的首地址
如果我们把new拆开来写,那么代码如下:
Person *p = [[Person alloc]init];
其中 init 方法就是我们说的构造方法,用来初始化一个对象。
构造方法的重写
1)重写构造方法时,必须先调用父类的构造方法,先初始化父类的属性,用self接收返回值
2)判断父类的返回值,如果父类初始化失败,那么将停止对子类成员变量的初始化。
3)返回初始化完成的对象
我们让Person类重写NSObject类的init方法
声明Person类(Person.h)
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,assign)int age;
@property(nonatomic,copy)NSString *name;
@end
实现Person类(Person.m)
#import "Person.h"
@implementation Person
- (instancetype)init
{
//调用父类的构造方法
self = [super init];
//判断父类是否初始化成功
if (self) {
_age = 25;
_name = @"小李";
}
return self;
}
@end
此时,我们执行 [Person new] 或者 [[Person alloc] init],是,新创建的对象的两个成员变量会被赋值。
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc]init];
NSLog(@"%d\t%@",p.age,p.name);// 25 小李
}
return 0;
}
自定义构造方法
自定义构造方法的规范
1)一定是对象方法
2)返回值一般是id类型
3)方法名一般以 initWith 开头
自定义构造方法的代码
无参数
#import "Person.h"
@implementation Person
-(id)initWithPerson{
if (self = [super init]) {
_age = 25;
_name = @"小李";
}
return self;
}
@end
#import "Person.h"
@implementation Person
-(id)initWithPerson:(int)age andName:(NSString *)name{
if (self = [super init]) {
_age = age;
_name = name;
}
return self;
}
@end
在main函数中得操作
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//调用固定赋值
Person *p1 = [[Person alloc]initWithPerson];
NSLog(@"%d\t%@",p1.age,p1.name); //20 小李
//调用指定值构造方法
Person *p2 = [[Person alloc]initWithPerson:10 andName:@"小王"];
NSLog(@"%d\t%@",p2.age,p2.name); //10 小王
}
return 0;
}