- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在查看一些旧代码,并看到以下 if 语句:
if ([NSThread currentThread] != [NSThread mainThread])
我偷偷怀疑这和
if (![[NSThread currentThread] isMainThread])
我很怀疑,因为我们从该领域获得了一些崩溃报告(仅限 iOS 6),这些崩溃报告似乎是由需要在主线程上运行的代码引起的,而实际上不是。该代码似乎受到前一个 if 语句的保护,但考虑到我们看到的崩溃次数,我不相信。
上面的两个 if 语句是否等效,或者第一个是否有可能由于某种原因而失败?
最佳答案
How could [NSThread currentThread] return a different instance of the same thread?
文档不保证返回的 NSThread
实例总是相同的。一个假设的实现可能是:
+ (NSThread *)currentThread {
return [[NSThread alloc] initWithPrivateIdentifier:pthread_self()];
}
实际的实现不太可能像这样工作。我的直觉甚至说比较实例身份是安全的——但文档不支持这一点。
Is it possible for a given thread to have multiple instances?
文档没有相反的说明。所以,是的,这至少是可以想象的。
I'm trying to determine if this really has a chance of fixing a crash I can't reproduce.
实际上,在实践中,我怀疑 [NSThread currentThread] != [NSThread mainThread]
与 +[NSThread isMainThread]
不同,但这只是我的感觉。
关于ios - isMainThread 和 currentThread == mainThread 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14141892/
谁能给我解释一下这个错误信息是什么意思? Assertion failed: ([NSThread isMainThread]), function -[AFContextManager addCon
这段代码 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSLog(@"Main
我正在查看一些旧代码,并看到以下 if 语句: if ([NSThread currentThread] != [NSThread mainThread]) 我偷偷怀疑这和 if (![[NSThre
我是一名优秀的程序员,十分优秀!