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