【发布时间】:2016-12-17 22:25:26
【问题描述】:
据我所知,如果一个结构包含多个引用作为存储的属性,分配它的成本(2*reference)比分配一个类的成本高。 局部变量的情况是否相同?
struct ViewNavigationRouter {
private let firstViewController : UIViewController
init(firstViewController: UIViewController) {
self.firstViewController = firstViewController
}
func navigate(from: UIViewController) {
let viewController1 : UIViewController = xxx
let viewController2 : UIViewController = xxx
let viewController3 : UIViewController = xxx
}
}
class ViewNavigationRouter {
private let firstViewController : UIViewController
init(firstViewController: UIViewController) {
self.firstViewController = firstViewController
}
func navigate(from: UIViewController) {
let viewController1 : UIViewController = xxx
let viewController2 : UIViewController = xxx
let viewController3 : UIViewController = xxx
}
}
提前致谢:)
【问题讨论】:
-
“分配成本更高”是什么意思?内存方面?你有链接到你知道的地方吗?
-
是的,您可以观看有关它的视频:developer.apple.com/videos/play/wwdc2016/416 如果结构有引用,则它们中的每一个都分配在堆中,并且它添加了 2 个额外的单词(类型和引用计数),甚至结构在堆栈中分配
-
似乎问题所指的部分大约在 15 分钟内,他们指出要复制内部包含 N 个引用的结构,所有这些引用都必须增加其保留计数(而如果你添加另一个对内部有 N 个引用的类的引用,则这一切都不会发生)。
-
"如果结构有引用,每个引用都分配在堆中,并添加 2 个额外的字(类型和引用计数),即使结构也分配在堆栈中"。好吧,当你分配一个新的类实例时也会发生同样的事情。这实际上并不是分配结构的效果,而是分配引用指向的对象的效果。另外,如果你复制一个结构,第二个结构的引用将指向堆上的相同对象,所以那里没有重复。
标签: ios swift performance memory