为什么 for-in 比 swift 调试模式下的慢?如果您认为,是的,它是在没有优化的情况下运行的。
??下面的代码,时间是for-in和没有优化的比较
49999995000000 for-in -- 时间 = 3.3352
4999999950000000 而 -- 时间 = 0.3613
??但是,如果使用速度优化
49999995000000 for-in -- 时间 = 0.0037
49999995000000 而 -- 时间 = 0.0035
我想知道“为什么 for-in 比没有优化的时候慢?为什么优化中的 for-in 和 while 这么快?”
import Foundation
func processTime(_ title: String, blockFunction: () -> ()) {
print()
let startTime = CFAbsoluteTimeGetCurrent()
blockFunction()
let processTime = CFAbsoluteTimeGetCurrent() - startTime
print(title, " -- time = \(String(format : "%.4f",processTime))")
}
processTime("for-in") {
var sum = 0
for …Run Code Online (Sandbox Code Playgroud) 我研究过GCD和线程安全。在苹果文档中,GCD是Thread-Safe的,意味着多个线程可以访问。我了解了线程安全的含义,即每当多个线程访问某个对象时总是给出相同的结果。
我认为Thread-Safe和GCD的Thread-Safe的含义不一样,因为我测试了下面写的一些案例,将0到9999相加。
当我多次执行下面的代码时,“something.n”值不同。如果 GCD 是线程安全的,为什么“something.n”值不一样?
我真的很困惑..你能帮助我吗?我真的很想掌握线程安全!!!
class Something {
var n = 0
}
class ViewController: UIViewController {
let something = Something()
var concurrentQueue = DispatchQueue(label: "asdf", attributes: .concurrent)
override func viewDidLoad() {
super.viewDidLoad()
let group = DispatchGroup()
for idx in 0..<10000 {
concurrentQueue.async(group: group) {
self.something.n += idx
}
}
group.notify(queue: .main ) {
print(self.something.n)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我对Window 或 Linux 中的动态链接库和 iOS 中的动态链接库的优势之间的差异感到很奇怪。
\n下面的\xe2\xac\x87\xef\xb8\x8f这几句就是为了证明我为什么感觉怪怪的。
\n我了解到库可以分为静态库和动态库
\n使用动态库的优点是允许其他应用程序使用相同的动态库(在Window中,.dll文件),这样每个应用程序的内存使用量都可以减少,并且可以更容易地重新分发动态库而不是重新分发应用程序。\n实际上我在使用某些应用程序时可能会遇到“没有XXX.dll文件”的情况
\n在Xcode中,当创建新项目时,我们可以在.\n中选择框架和静态库framework & library。\n创建项目后,我们可以选择如何成为Mach-O Type,例如“可执行文件,动态库,静态库”等。
所以,我认为如果我选择带有动态库的Mach-O类型,则该项目将使用动态链接库以链接方式编译。
\n\xe2\xac\x87\xef\xb8\x8f 我真的很想知道。
\n因为我无法体验到这一点。
\n