[Objective-C] assign/retain/copy 详解

转自:http://www.88cto.com/996655/article/details/21674.html


注意:assign 是默认值


1.assign:这个属性一般用来处理基础类型,比如int、float等等,如果你声明的属性是基础类型的话,assign是默认的,你可以不加这个属性!(一个常见的例外是delegate的set方法通常设为assign,这是为了避免循环引用造成的引用计数无法归0,然后内存泄漏——考虑一个view的delegate为该view所在controller的情况)

2.retain: 释放旧的对象 将旧对象的值赋予输入对象 并将输入对象的索引计数+1 ,主要应用与NSObject与其子类中.具体实现如下:Book类创建一个对象

【yasi】释放旧的对象_book,将输入对象book的值赋予旧的对象_book,并将输入对象book的索引计数+1 ,主要应用于NSObject与其子类中

- (void)setBook:(Book *)book{ 
    if (_book != book) {
        [_book release]; // 释放掉旧的_book不用担心开始_book = nil时候,释放 [nil release]在OC中不算错误没有空指针概念
       _book = [book retain];     //  book赋值给新的_book
    }
}

- (Book*)book{
    return _book;
}

3 . copy :这个会自动生成你赋值对象的克隆,相当于在内存中新生成了该对象的副本,这样一来,改变赋值对象就不会改变你声明的这个成员变量了一般推荐的做法是 NSString类型用copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值