OC类的构造函数,析构函数与setter/getter属性实例方法

在面向对象编程中,免不了要涉及类以及类的构造函数与析构函数。

OC中的构造函数

在OC中,构造函数我们经常用init函数名称命名,且在NSObjec父类中有init函数的默认实现。

OC的构造函数比较特别,就是需要我们显示的调用才会执行,其实这里就是一个普通的函数,只不过我们在里面实现了类的基本数据初始化逻辑。基于此,我们甚至不必非要命名构造函数为init,任意的名称也是可以的(但我们最好是以init作为函数的开头名称,ARC会对init开头的函数返回对象做特殊的处理)。

对于构造函数,我们必须严格遵守的规则:

1、构造函数与alloc函数必须一起使用,调用alloc,必须调用init,他们就像一个函数一样使用。

2、对于同一个对象,不要多次调用alloc] init]方法初始化它。

OC中的析构函数

对于构造函数,OC的析构函数相对单纯些,及在每个对象释放时,系统会自动调用dealloc方法,我们在dealloc方法中写我们的释放逻辑即可。


setter and getter属性实例方法

OC中我们可以中指令@property来添加类的属性。同时,编译器会为我们自动实现属性的setter和getter方法。

默认的,被定义为属性的数据,其初始化为0(对象属性为nil)。我们可以利用getter方法,对类的属性进行“惰性初始化”,这是一个编程技巧。

何为惰性初始化?简单的说,对数据的初始化我们不放在类的构造函数中,而是什么时候使用,才对其进行初始化。这可以减少不必要的系统开销。

比如下面的代码

// Deck的私有声明
@interface Deck()
@property(strong, nonatomic) NSMutableArray* cards;   // 使用惰性初始化
@end

对于属性cards的使用,我们必须先为其分配内存空间,否则作为默认的nil对象,它是不能够存储任何值的。那么,我们就可以利用惰性初始化的方法,对其getter方法进行如下改写:

-(NSMutableArray*) cards
{
    if (!_cards) {
        _cards =  [[NSMutableArray alloc] init];
    }
    return _cards;
}

对于类的setter与getter方法,还有以下细节:

1、若同时重写了属性的setter与getter方法,则需要在类的实现文件中,添加如下代码

@synthesize  属性名 = _属性名; 

2、我们可以在声明属性的时候,改写其默认生成的setter与getter方法名称,形式如下:

@property(nonatomic, getter=isChosen) BOOL chosen;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值