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 入门指南
146
4
给这两个对象,对象
A
与对象
B
都可以修改其
Dog
属性,那么一个对象对
Dog
属性的
修改就会影响另一个对象。你持有着一个对象,然后发现它已经被其他人修改了。这个
问题在多线程应用中变得更为严重,相同的对象可能会被两个不同的线程修改;值类型
就不存在这些问题;实际上,正是由于这个差别的存在,在设计对象类型时,你会更倾
向于使用结构体而非类。
引用类型有缺点,但同样也有优点!优点在于传递类实例变得非常简单,你所传递的只
是一个指针而已。无论对象实例有多大,多复杂;无论包含了多少属性,拥有多少数据量,
传递实例都是非常快速且高效的,因为整个过程中不会产生新数据。此外,在传递时,
类实例更为长久的生命周期对于其功能性和完整性是至关重要的;
UIViewController
要是类而不能是结构体,因为无论如何传递,每个
UIViewController
实例都会表示运行
着的应用的视图控制器体系中同一个真实存在且持久的视图控制器。
递归引用
值类型与引用类型的另一个主要差别在于值类型从结构上来说是不能递归的:值类
型的实例属性不能是相同类型的实例。如下代码无法编译通过:
struct Dog { // compile error
var puppy : Dog?
}
Dog
包含了
Puppy
属性,同时
Puppy
又包含了
Dog
属性等更为复杂的循环链也
是不合法的。不过,如果
Dog
是类而不是结构体,那就没问题了。这是值类型与
引用类型在内存管理上的不同导致的(第
5
章将会详细介绍引用类型内存管理,第
12
章会介绍这个话题)。 ...
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