Skip to Main Content
iOS 编程基础:Swift、Xcode 和Cocoa 入门指南
book

iOS 编程基础:Swift、Xcode 和Cocoa 入门指南

by Matt Neuburg
January 2017
Intermediate to advanced content levelIntermediate to advanced
552 pages
9h 43m
Chinese
China Machine Press
Content preview from iOS 编程基础:Swift、Xcode 和Cocoa 入门指南
488
12
但遗憾的是,持有弱引用的内建
Cocoa
类的属性有时不是
ARC
弱引用(因为这些类太
老了,还要保持向后兼容,而
ARC
是比较新的概念)。这种属性会通过关键字
assign
声明。比如,
AVSpeechSynthesizer
delegate
属性的声明如下所示:
@property(nonatomic, assign, nullable)
id<AVSpeechSynthesizerDelegate> delegate;
Swift
中,该声明如下所示:
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.
Start your free trial

You might also like

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

Aurélien Géron
Swift 人工智能实战:从基础理论到AI 驱动的应用程序开发

Swift 人工智能实战:从基础理论到AI 驱动的应用程序开发

Mars Geldard, Jonathon Manning, Paris Buttfield-Addison, Tim Nugent

Publisher Resources

ISBN: 9787111556350