保留对 mainScreen() 和 defaultManager() 类型函数返回值的引用是否可以优化任何内容?
Does holding a reference to values returned by mainScreen() and defaultManager() type functions optimize anything?
一些核心类使用一个函数来return它自己的一个实例:
NSFileManager.defaultManager()
PHImageManager.defaultManager()
UIScreen.mainScreen()
...
如果我将结果值赋给一个我使用了 n 次的变量,而不是仅仅调用函数 n 次,它会以某种方式提高性能吗?例如
let fileManager = NSFileManager.defaultManager();
fileManager.fileExistsAtPath(somePath)
fileManager.fileExistsAtPath(someOtherPath);
对
NSFileManager.defaultManager().fileExistsAtPath(somePath)
NSFileManager.defaultManager().fileExistsAtPath(someOtherPath);
或
let scale = UIScreen.mainScreen().scale;
let size = CGSizeMake(360 * scale, 720 * scale);
对
let size = CGSizeMake(360 * UIScreen.mainScreen().scale, 720 * UIScreen.mainScreen().scale);
你可以通过运行多次循环检查它并检查时差。
结果是相同的,因为 defaultManager()
和 mainScreen()
正在返回一个指针,它与获取保存指针的变量相同,唯一 "costs" (并且它是非常快)是在两种情况下获得相同时间的内存单元。
顺便说一句,如果函数 returns a struct 那么 swift语言确实克隆了它,它可能很重。
func test(){
print(NSDate())
for i in 0..<30000{
NSFileManager.defaultManager()
}
print(NSDate()) //12 seconds diff
let test = NSFileManager.defaultManager()
for i in 0..<30000{
test
}
print(NSDate()) //12 seconds diff
}
test()
一些核心类使用一个函数来return它自己的一个实例:
NSFileManager.defaultManager()
PHImageManager.defaultManager()
UIScreen.mainScreen()
...
如果我将结果值赋给一个我使用了 n 次的变量,而不是仅仅调用函数 n 次,它会以某种方式提高性能吗?例如
let fileManager = NSFileManager.defaultManager();
fileManager.fileExistsAtPath(somePath)
fileManager.fileExistsAtPath(someOtherPath);
对
NSFileManager.defaultManager().fileExistsAtPath(somePath)
NSFileManager.defaultManager().fileExistsAtPath(someOtherPath);
或
let scale = UIScreen.mainScreen().scale;
let size = CGSizeMake(360 * scale, 720 * scale);
对
let size = CGSizeMake(360 * UIScreen.mainScreen().scale, 720 * UIScreen.mainScreen().scale);
你可以通过运行多次循环检查它并检查时差。
结果是相同的,因为 defaultManager()
和 mainScreen()
正在返回一个指针,它与获取保存指针的变量相同,唯一 "costs" (并且它是非常快)是在两种情况下获得相同时间的内存单元。
顺便说一句,如果函数 returns a struct 那么 swift语言确实克隆了它,它可能很重。
func test(){
print(NSDate())
for i in 0..<30000{
NSFileManager.defaultManager()
}
print(NSDate()) //12 seconds diff
let test = NSFileManager.defaultManager()
for i in 0..<30000{
test
}
print(NSDate()) //12 seconds diff
}
test()