Object-c --- init方法的重写和自定义

2020-09-03  本文已影响0人  开了那么

1、init

OC中的init方法的作用是在对象实例化后对其初始化,在其它编程语言中(如Java、C++)都有构造方法,OC中init方法和构造方法是一个概念的。

例如:我们创建一个Person 类,继承自NSObject

@interface Person : NSObject
@property (nonatomic, strong, nullable) NSString *firstName;
@property (nonatomic, strong, nullable) NSString *lastName;
@property (nonatomic, strong, readonly) NSString *fullName;
+(void)test12;
@end

调用Person类的类方法new
Person *person=[Person new];
其等价于
Person *person=[[Person alloc] init];

其中alloc方法用于实现化一个对象,init用来将对象初始化。
默认的初始化规则是:
基本数据类型初始化为0
指针数据类型初始化为空
如果我们不想使用默认的初始化规则,则可以重写init方法或自定义init方法。

2、为什么要重写init 方法

例如:

(id)init {
self = [super init];
if (self) {
// Initialize self.
}
return self;
}

我们将重写Person类的init方法

-(instancetype)init{
    if (self = [super init]) {
        self.firstName = @"wagn";
        self.lastName = @"cc";
    }
    return self;
}

我们调用Person ,

    Person *person = [[Person alloc]init];
    NSLog(@"%@---%@",person.firstName,person.lastName);
    
    打印结果:
    2020-09-03 17:38:20.318644+0800 TEST[976:5177869] wagn---cc

总结:重写构造方法的目的:为了让对象方法创建出来,成员变量就会有一些固定的值。

3、 自定义的init方法

自定义的init方法常用于在初始化对象时指定对象的值,同样的,自定义的init方法也需要遵守一定的语法规范:

-(instancetype)initWithFirstName:(NSString *)firstName lastName:(NSString *)lastName{
    self = [super init];
    if (self) {  
        self.firstName = firstName;
        self.lastName = lastName;      
    }
    return self;
}

我们调用初始化方法

Person *person2 = [[Person alloc]initWithFirstName:@"小张" lastName:@"离"];
NSLog(@"%@---%@",person2.firstName,person2.lastName);

打印结构:
2020-09-03 17:43:22.155930+0800 TEST[1176:5185882] 小张---离    
上一篇 下一篇

猜你喜欢

热点阅读