unowned(unsafe) var delegate: AVSpeechSynthesizerDelegate?
图12-3:向野指针发送消息造成了崩溃
Swift
中的
unowned
与
Objective-C
中的
assign
是一个意思;它们都是告诉你这里不会
使用
ARC
内存管理。
Swift
还会发出
unsafe
警告;对于你自己的代码来说,除非安全,
否则你是不会使用
unowned
的,
Cocoa
的
unowned
则是存在潜在风险的,你需要格外小心。
即便你的代码使用了
ARC
,但如果
Cocoa
代码没有使用,那就表示还可能会出现内存管
理问题。诸如
AVSpeechSynthesizer
的
delegate
这样的引用最终可能会变成一个野指针
(如果该引用所指向的对象销毁了),指向了垃圾。如果你或
Cocoa
通过该引用发送了消息,
那么应用就会崩溃,而这常常出现在真正的错误发生很久之后,所以寻找崩溃根源就会
变得相当困难。这种崩溃的典型症状是在与内存管理活动交互时出现 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.