gpt4 book ai didi

swift - 在 viewdidload() 内部定义函数是否比在外部定义它们节省更多内存?

转载 作者:搜寻专家 更新时间:2023-10-31 21:56:17 26 4
gpt4 key购买 nike

因为 viewdidload() 在 UIViewController 对象的那个实例的生命周期中只被调用一次,这是否意味着下面的这个例子是一个“不好的做法”,因为 setBackgroundColor(),一个只被调用一次的函数,是不必要的当它真的应该完全存在(定义和调用)在 viewdidload() 中时加载到整个类的内存中?或者在效率方面,setBackgroundColor()在哪里定义和调用不重要吗?

class MasterViewController: UIViewController {

func setBackgroundColor() {
self.view.backgroundColor = UIColor.green
}

// Do any additional setup after loading the view, typically from a nib.
override func viewDidLoad() {
super.viewDidLoad()

setBackgroundColor()

}

// Dispose of any resources that can be recreated.
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

}

最佳答案

将函数设为方法的局部会改变它的作用域,但不会改变从它编译的代码的生命周期。类的方法也是如此:它们的二进制代码不是单独管理的,至少目前不是。不过,这不是什么大问题,因为您的函数的可执行代码相对较小。

这里重要的是函数名称在其外部范围内不可见,让其他方法定义自己的 setBackgroundColor() 函数,与 viewDidLoad 中定义的函数无关:

override func viewDidLoad() {
super.viewDidLoad()
// Nested function definition
func setBackgroundColor() {
self.view.backgroundColor = UIColor.green
}
// Calling nested function
setBackgroundColor()
}

这提高了可读性,因为函数定义就在使用它的地方。它还提高了可维护性,因为重构您的代码的任何人都可以确定,除了 viewDidLoad 之外,setBackgroundColor 没有其他用途。

当然,这只是一个例子。嵌套函数在这里不是必需的 - 您可以在没有 setBackgroundColor 函数的情况下重写它,如下所示:

override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.green
}

关于swift - 在 viewdidload() 内部定义函数是否比在外部定义它们节省更多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com