OC中得构造方法

------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;
}


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值