在使用一个weak的 property 前应该注意检测该property是否为nil,如果是类似检测strong的property的方法则为:
- if (self.someWeakProperty) {
- [someObject doSomethingImportantWith:self.someWeakProperty];
- }
复制代码
但是这样是有问题的,因为如果是多线程操作,则可能在检测过程中被dealloc掉了,所以正确的方法应该是:
- NSObject *cachedObject = self.someWeakProperty;
- if (cachedObject) {
- [someObject doSomethingImportantWith:cachedObject];
- }
- cachedObject = nil;
复制代码
与第一种的检测方法的区别在于,用strong指针指向它,保证它在被检测的过程中还活着,不会被dealloc掉。
最后不要忘了撤掉strong指针 |
|