草庐IT

grand-central-dispatch

全部标签

ios - 为什么在单独的线程中使用异步 HTTP 请求而不是同步 HTTP?

我知道每个工作方式之间的差异,但我想从性能方面了解(iphone内的资源)。假设我发送了一个异步请求并等待委托(delegate)被调用。这不会锁定我的执行线程。但是,这样做与仅使用GCD在另一个线程中发送同步请求有什么区别。像这样:dispatch_queue_tfindPicsQueue;findPicsQueue=dispatch_queue_create("FindPicsQueue",NULL);dispatch_async(findPicsQueue,^{NSData*theResponse=[NSURLConnectionsendSynchronousRequest:th

objective-c - 具有回调方法的 IOS Grand Central Dispatch

我没有在我的应用程序中使用GCD或太多线程,但我遇到过需要在另一个线程上运行一两个方法的情况。此方法完成后,我需要使用回调中的主线程调用另一个方法。我一直在四处寻找如何检测线程何时完成操作但仍然不太清楚这个问题。我创建了一个测试应用程序,并使用了viewDidLoad方法作为一个快速示例。-(void)viewDidLoad{[superviewDidLoad];//Doanyadditionalsetupafterloadingtheview,typicallyfromanib.dispatch_async(dispatch_get_global_queue(DISPATCH_QUE

ios - 如何将 dispatch_data_t 转换为 NSData?

这是正确的方法吗?//convertconstvoid*buffer=NULL;size_tsize=0;dispatch_data_tnew_data_file=dispatch_data_create_map(data,&buffer,&size);if(new_data_file){/*toavoidwarningreally-sincedispatch_data_create_mapdemandswecareaboutthereturnarg*/}NSData*nsdata=[[NSDataalloc]initWithBytes:bufferlength:size];//use

tcp - 如何使用 openresty lua 中的第一个字节内容将 tcp 请求分派(dispatch)到后端

我已经启动了一个带有一个tcp服务器和两个后端的openresty。tcp服务器根据来自tcp流的内容将请求分派(dispatch)给后端。以下是openresty配置示例:stream{#defineaTCPserverlisteningontheport1234:upstreambackend1{server172.17.0.1:8081;}upstreambackend2{server172.17.0.1:8082;}server{listen1234;content_by_lua_block{localsock=ngx.req.socket(true)--reveivefirs

swift - 使用 dispatch_after swift 延迟 'glitch'

目前我有一个延时函数如下://Delayfunctionfromhttp://stackoverflow.com/questions/24034544/dispatch-after-gcd-in-swift/24318861#24318861funcdelay(delay:Double,closure:()->()){dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(delay*Double(NSEC_PER_SEC))),dispatch_get_main_queue(),closure)}此代码可满足我的需要,但一旦延迟超过1

Swift dispatch_async 导致 EXC_BAD_ACCESS 错误

在我的Swift项目中,我试图在后台线程中处理一个FIFO队列(我在这里将其称为列表以避免混淆)。当我使用dispatch_async时,它会在仅执行列表的某些部分后导致EXC_BAD_ACCESS错误。我已尽可能将代码简化为以下Playground代码。在playground中,当main_thread设置为true时,代码会处理列表中的所有100个项目。如果为假,则只会处理少数项目。如果代码在项目中,当main_thread为false时会出现EXC_BAD_ACCESS。显然,我也尝试过指定一个串行队列,但这似乎没有帮助。我缺少或不理解什么?谢谢。importUIKitletma

ios - GCD - 跟踪总数或异步任务

我正在尝试跟踪当前异步网络请求的数量,并仅在有一个或多个请求正在进行时显示事件指示器。我正在使用调度组,但我认为我在dispatch_group_notifyblock和我的closureblock之间存在竞争条件,因为我偶尔会在dispatch_group_leave上崩溃(任务组)行:fatalerror:unexpectedlyfoundnilwhileunwrappinganOptionalvalue我认为发生这种情况是因为当调度组中没有更多项目时,它有时没有及时释放(设置为nil),在它被后面的请求使用之前(而不是正在创建的新组)。然后,该组立即通知它为空,回调闭包被调用,它

swift - DispatchQueue.main.asyncAfter(deadline : . now() + 5.0) 如何在 Swift 3 中工作?

在Swift3中,GCD的语法发生了很大变化。对dispatch_after()的调用现在看起来像这样:DispatchQueue.main.asyncAfter(deadline:.now()+5.0){//dosomething}该代码会在block被调用5秒后调用它。这是如何运作的?文档说deadline参数是dispatch_time_t,它是UInt64的类型别名。我假设它是以纳秒为单位的马赫时间。但是,.now()+delay语法将小数秒添加到值中。DispatchTime.now()不返回UInt64吗?如果是这样,向其添加小数秒应该不起作用。如果有的话,我希望添加到.n

swift - 使用异步方法的 While 循环

我有问题。我得到了while循环的方法,里面有异步方法。问题是while循环在异步任务完成之前完成,所以我的方法完成了几次。所以我需要complete()只被调用一次,当所有while循环都完成并且所有异步任务都已经完成时。有人可以帮助我吗,我找到了一些答案,但对我的问题没有任何帮助。循环:letdispatchGroup=DispatchGroup()repeat{dispatchGroup.enter()varconfigSection="@rule[\(rulesNumber)]"print(rulesNumber,rulesCount)Json().deviceinform(t

swift - 制作 GMSMarkers 时无法更新 UI

初始化GMSMarkers的函数:funcmakeMarkers(progressHandler:((String)->Void)?=nil){progressHandler?("Инициализируеммаркеры...")fordeviceinself.devices{progressHandler?("Инициализируеммаркеры:дляустройства\(device.name!)...")ifletposition=self.positions.findById(device.positionId){ifletmarker=DeviceMarker(d