我们如何衡量在Swift中运行函数所用的时间?我试图像这样显示经过的时间:"Elasped time is .05 seconds".看到在Java中,我们可以使用System.nanoTime(),是否有任何等效的方法可用于Swift来实现这一目的?
请看一下示例程序:
func isPrime(var number:Int) ->Bool {
var i = 0;
for i=2; i<number; i++ {
if(number % i == 0 && i != 0) {
return false;
}
}
return true;
}
var number = 5915587277;
if(isPrime(number)) {
println("Prime number");
} else {
println("NOT a prime number");
}
Run Code Online (Sandbox Code Playgroud) 它说,在WWDC14演示文稿的第17页上
使用Objective-C?还是要管理自动释放池
autoreleasepool {/*code*/}
那是什么意思?这是否意味着如果我的代码库没有任何Objective-C文件,autoreleasepool {}是不必要的?
在一个相关问题的答案中,有一个例子autoreleasepool可以是有用的:
- (void)useALoadOfNumbers {
for (int j = 0; j < 10000; ++j) {
@autoreleasepool {
for (int i = 0; i < 10000; ++i) {
NSNumber *number = [NSNumber numberWithInt:(i+j)];
NSLog(@"number = %p", number);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果上面的代码被autoreleasepool删除后转换成Swift ,那么Swift是否足够聪明,知道该number变量应该在第一个之后发布}(就像其他语言一样)?
我在Swift中有一个while循环,试图解决问题,有点像比特币挖矿。简化版本是-
import SwiftyRSA
func solveProblem(data: String, complete: (UInt32, String) -> Void) {
let root = data.sha256()
let difficulty = "00001"
let range: UInt32 = 10000000
var hash: String = "9"
var nonce: UInt32 = 0
while (hash > difficulty) {
nonce = arc4random_uniform(range)
hash = (root + String(describing: nonce)).sha256()
}
complete(nonce, hash)
}
solveProblem(data: "MyData") { (nonce, hash) in
// Problem solved!
}
Run Code Online (Sandbox Code Playgroud)
尽管此循环正在运行,但内存使用量有时会稳定达到300mb,一旦完成,它似乎就不会释放。
有人能够解释为什么会这样吗,如果这是我应该担心的事情?