弱引用

#import <Foundation/Foundation.h>

/*

 swift弱引用:

 http://blog.csdn.net/deargua/article/details/38142951

 Swift一样,可以用weak关键字来表示弱引用,防止死锁。


 1.weak的使用

 2.Cocoa中有些类是不支持weak的,定义会报错,对于这些类需要生命为非安全的。

 属性的声明方式:@property (unsafe_unretained) NSObject *unsafeProperty;

 变量的定义方式: NSObject * __unsafe_unretained unsafeReference;

 这个声明感觉跟swift中的unowned一样,该变量被释放了不会被赋值为nil,但是调用会崩溃。

 

*/

@property (weak) id weakPropertyVar;

NSString *__weak someObject = ...


/*注意如下代码,因为创建后没有任何强引用,则声明后会立即被销毁 */

NSObject *__weak someObject = [[NSObject alloc] init]


/* 当一个weak引用赋值给强引用后,该实例就不会被删除了,在多线程中,

   不仅要考虑本线程的处理,还要考虑其他线程 下面的做法是不对的 */

if weakObject

{

    [weakObject method]; //进入到这个块内,可能被其他的线程释放了,导致异常

}


/*

正确的做法如下,先赋值给强引用,防止被释放

*/

NSObject * object = weakObject;

if object

{

    [object method] //这时就不会被其他线程所影响,因为object默认的时强引用。

}

object nil //注意在使用完,将此强引用释放。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值