下面的代码将异步加载资产的值。我使用while循环等待它。
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:aAudioLink options: nil];
[asset loadValuesAsynchronouslyForKeys:keys
completionHandler:^{
canExit = TRUE;
}];
while (canExit == FALSE) {
// NSLog (@"canExist = FALSE");
}
NSLog(@"canExist = TRUE");
如果 NSLog 语句像上面的代码一样被注释,最后的 NSLog 将不会被调用。如果没有注释 NSLog 语句,则调用最后一个 NSLog。
块和块外的代码在不同的线程上运行,并且两者都不是主线程。
这是什么原因?