OC中的构造方法

1.OC中的初始化方法

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Student *s2 = [Student new];
        Student *s1 = [[Student alloc]init]; 
    }
    return 0;
}

这里的new方法和 alloc init 方法所表达的意思是一样的,但是通常我们会选择第二种写法,因为当我们在重写构造方法的时候,会传进一些参数,但是new方法根本不会调到. 故此我们不选择第一种方法

alloc方法是一个类方法,alloc部分用option+click点击进去显示详情, 声明的方法是: + (instancetype)alloc;
作用: 哪一个类调用这个方法,就创建哪个类的对象,并把对象返回

init方法是一个对象方法,声明的方法: - (instancetype)init;
作用: 初始化对象 为对象赋初始值

对象类型初始值
基本数据类型0
C指针NULL
OC指针nil

所以我们如果创建一个对象如果没有为这个对象的属性赋值时,这个对象的属性是有默认值的


2.构造方法
如果我们想要让创建的对象属性的默认值不是 NULL/nil/0,而是我们自定义的,那么这个时候我们可以重写init方法,在这个方法中按照我们自己的想法为这个对象的属性赋值.
从写init方法的规范:
1).必须要调用父类init方法
2).将方法的返回值赋值给self
- (instancetype)init
{
self = [super init];
}

这样就达到了上面所说的两条规范
但是有一点需要注意的是,调用init方法初始化对象有可能会失败,如果初始化失败,返回的就是nil
所以我们有第三点规范:
3).判断父类是否初始化成功,判断self是否为nil,如果不为nil则初始化成功

@implementation Student

 1. (instancetype)init
{
    self = [super init];
    if (self != nil) {
        self.name = @"Jack";
    }
    return self;
}
@end

3.重写构造方法
当我们需要在在构造方法中传入一些参数的时候,就需要我们自己重写构造方法,添加一些可传入的参数
规范:
1). 自定义构造方法的返回值根据需要定义类型
2). 自定义构造方法的名称必须以initWith开头 W要大写 小写报错!
3). 方法的实现和init的要求一样

//.h文件
@interface Student : NSObject

@property NSString *name;
@property int age;

-(instancetype)initWithName:(NSString *)name andAge:(int)age;
@end
//.m文件
#import "Student.h"
@implementation Student

- (instancetype)initWithName:(NSString *)name andAge:(int)age
{
    if (self = [super init]) {
        self.name = name;
        self.age = age;
    }
    return self;
}
@end
//main.m中调用
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Student *s1 = [[Student alloc]initWithName:@"小黄" andAge:18];
    }
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值