相关疑难解决方法(0)

检查当前线程是否是主线程

有没有办法检查当前线程是否是Objective-C中的主线程?

我想做这样的事情.

  - (void)someMethod
  {
    if (IS_THIS_MAIN_THREAD?) {
      NSLog(@"ok. this is main thread.");
    } else {
      NSLog(@"don't call this method from other thread!");
    }
  }
Run Code Online (Sandbox Code Playgroud)

iphone cocoa multithreading objective-c xamarin.ios

117
推荐指数
5
解决办法
4万
查看次数

对于iOS 6中的完成块,dispatch_get_current_queue()的替代方法是什么?

我有一个接受块和完成块的方法.第一个块应该在后台运行,而完成块应该在调用方法的任何队列中运行.

对于后者我总是使用dispatch_get_current_queue(),但似乎它在iOS 6或更高版本中已被弃用.我应该用什么呢?

cocoa-touch objective-c grand-central-dispatch objective-c-blocks ios6

98
推荐指数
5
解决办法
5万
查看次数

如何在swift 3中获取当前队列名称

我们在swift 2.2中有这样的函数,用于使用当前运行的线程打印日志消息:

func MyLog(_ message: String) {
    if Thread.isMainThread {
        print("[MyLog]", message)
    } else {
        let queuename = String(UTF8String: dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL))! // Error: Cannot convert value of type '()' to expected argument type 'DispatchQueue?'
        print("[MyLog] [\(queuename)]", message)
    }
}
Run Code Online (Sandbox Code Playgroud)

这些代码不再在swift 3.0中编译.我们现在如何获得队列名称?


问题是如何识别两个线程在同一个线程中的位置:检查Swift 3中是否有正确的调度队列.接受的答案建议用于将setSpecific"标签"与创建的队列相关联.但是,这并不能解决问题,因为我们想知道队列名称.队列可能不一定是由我们自己创建的.

swift swift3

22
推荐指数
3
解决办法
1万
查看次数

在返回值Swift的函数中进行多线程处理的最佳实践

我有一个问题可能不是专门针对实现而是提示/最佳实践的问题.

我正在研究Swift中的一个类,它以JSON格式从在线源获取数据.我希望在这个类中有特定的方法连接到在线源并以Dictionary类型返回结果.功能可能是这样的:

func getListFromOnline()->[String:String]{

    var resultList : [String:String]=[:]
    ...
    /*
    Some HTTP request is sent to the online source with NSURLRequest

    Then I parse the result and assign it to the resultList
    */
    ...

    return resultList
}
Run Code Online (Sandbox Code Playgroud)

我在这个实现中得到的,没有多线程,resultList显然是从在线源获取之前返回的.毫不奇怪,它会导致程序失败.

任何想法或提示如何实现相反的目标?我在这个实例中对多线程有点困惑,因为我想稍后从另一个类异步调用这个公共方法,我知道如何做到这一点,但是我不知道如何让返回参数的方法在多个内部进行多线程处理本身.

或者根本不是多线程,我在这里没有看到明显的解决方案?

multithreading design-patterns architectural-patterns swift

2
推荐指数
1
解决办法
1241
查看次数