我有一些可以在英特尔Mac电脑上运行的Objective-C代码,但在装有M1芯片的Mac电脑上却失败了.

dispatch_time_t now = dispatch_time(DISPATCH_TIME_NOW, 0);
dispatch_time_t delta = (uint64_t)(1 * NSEC_PER_SEC);
dispatch_time_t when = dispatch_time(now, delta);

NSLog(@"now: %llu", now);
NSLog(@"delta: %llu", delta);
NSLog(@"when: %llu", when);
NSLog(@"real delta: %llu", when-now);

它将打印如下内容:

now: 1272914827933
delta: 1000000000
when: 1272938827933
real delta: 24000000

1272914827933+1000000000=1273914827933,而不是1272938827933.为什么这个该死的失败了,而且只在一些Mac上?

编辑:当在实际的iPhone设备上运行时,这也是错误的.只需使用Obj-C创建一个新的Xcode项目,将代码粘贴到AppDelegate中,然后在您的手机上运行.

推荐答案

结果是,dispatch_time返回的是CPU时间,而不是纳秒.dispatch_after需要刻度,所以到最后一切都是好的,但简而言之,你不能像我试图做的那样比较数字.

Objective-c相关问答推荐

Objective C 中的 RSA 实现

如何使用 NSFileManager 删除目录及其内容

Objective-C 中的正式协议和非正式协议有什么区别?

是否需要 ARC 中的 NSNotificationCenter removeObserver?

setFont 已弃用?

UIScreen MainScreen Bounds 返回错误的大小

将子视图添加到 UIButton

你如何安排一个块在下一次运行循环迭代中运行?

UITableView 滚动事件

如何获得本地化的 Cancel、Done 等?

以编程方式创建 UITableView

StoryBoard 助理编辑器停止显示相关文件

为什么不鼓励使用伞式框架?

反转 NSString 文本

从 UITabBarController 在当前上下文中呈现模态视图控制器后出现黑屏

Cocoapods ld:找不到-lPods-Projectname 的库

获取临时目录中文件的文件路径和 URL

协议和代表之间的区别?

为什么 detailTextLabel 不可见?

如何在 xcode 项目中启用/禁用 ARC?