弱引用

#import

/*

 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 //注意在使用完,将此强引用释放。


你可能感兴趣的:(Objective-C)