今天来说一说这个错误,相信大家应该很常见了,可是往往越简单的地方越容易翻跟头,今天遇到了一个奇怪的现象,应该是Xcode的bug吧
self.photoObject.desc = ""
这行代码没运行倒时,debug查看photoObject变量有值,但是一运行就报错fatal error: unexpectedly found nil while unwrapping an Optional value,最后原来是因为使用weak定义所致
private weak var photoObject:POPhotoAsset!
想必是外面刚传进来时是有值的,所以Xcode显示了之前缓存下来得值,但是在运行时已经为空,真是坑爹呀
总结:
- Xcode调试器不可信,如出现异常,请用NSLog或Print打印出来
- 切勿滥用weak,一定要知道每一个变量的声明周期,尤其是销毁时机,原则上谁生成谁销毁。
- 明白使用weak的意义和后果,一旦用weak来定义类的属性,则意味着其何时销毁全然不知,有可能已经为空了你还不知道,很好的使用weak需要知道当前类和之前外部类的从属关系。这个以后再讲了