草庐IT

grand-central-dispatch

全部标签

Swift函数只能调用一次

编写一段只能执行一次的代码最简单的方法是什么?我知道一个方法,但有一个问题。首先,我写了一个bool变量,它有负值,但可以设置为正值,之后不能改变varhasTheFunctionCalled:Bool=false{didSet{hasTheFunctionCalled=true}}然后编写函数和里面的代码:functheFunction(){if!hasTheFunctionCalled{//dothething}hasTheFunctionCalled=true}但问题是变量可以从范围内的其他地方更改,这个解决方案看起来并不那么简单和具体。 最佳答案

swift 3 : capture strong self in @escaping closure without asynchronous work

有一个带有以下声明的协议(protocol):typealiasSuggestionSourceCallback=([Suggestion])->()protocolSuggestionSource{funcsuggest(_query:SuggestionQuery,callback:@escapingSuggestionSourceCallback)}有两个类实现了这个协议(protocol)。第一类异步获取建议(通过GCD)finalclassFisrtClass:SuggestionSource{privateletqueue=DispatchQueue(label:"my.a

swift - 创建队列和全局队列的区别。 swift 3

我仍在尝试掌握调度队列的概念我理解创建队列和全局队列的区别是全局并发执行,而创建队列串行执行。SERIAL(创建队列)letanotherQueue=DispatchQueue(label:"com.appcoda.anotherQueue",qos:.utility)CONCURRENT(全局队列)让globalQueue=DispatchQueue.global()但是,如果我像这样指定创建的队列是并发的呢:并发创建队列letanotherQueue=DispatchQueue(label:"com.appcoda.anotherQueue",qos:.utility,attrib

swift - 快速关闭时 gcd 中的弱 self

apiFunc(user:User.currentUser,start:0,limit:Constants.numberOfItemInOnePage,success:{[weakself](friends)->Voidindispatch_async(dispatch_get_main_queue(),{[weakself]()->VoidinifletstrongSelf=self{strongSelf.friendList=friendsstrongSelf.loading=falsestrongSelf.tableView.reloadData()}})},failure:ni

c - 从 C 函数更新进度条

我正在使用Swift开发适用于iOS8的音频应用程序。加载MIDI文件,当用户按下“保存”按钮时,它会在手动提取样本的C函数中呈现为文件。现在,我想为这个保存操作更新界面中的进度条。我在ViewController中向var添加了一个属性观察器,并将指向此var的指针传递给C函数,希望它会在循环期间更新它……好吧,没有。即使C函数在循环内更新var的值,此更新也只会在最后“触发”一次。有没有办法更新进度条?这是一些代码。谢谢!在ViewController中:varoutProgressBarValue:Float=0.0{willSet{dispatch_async(dispatch

ios - Swift:我可以加减 `dispatch_time_t` 变量吗?

我需要在iOS中使用Swift做一些时间计算。我必须使用dispatch_walltime。我希望这可以被视为公理化。在涉及时间数学的地方,我想我可能会得到“只需使用NSDate”的响应,但请相信它:我必须遵守dispatch_walltime。现在,很明显为什么有人会建议使用NSDate,因为当您使用NSTimeInterval和NSDate以及那些好东西时,它非常棒轻松制作自定义时间戳并比较它们并进行各种时间数学计算。但我必须使用dispatch_time_t,特别是像这样创建的dispatch_walltime://GetthetimeIntervalofnow.letnowIn

ios - iOS 中的操作同步挑战

我有3个操作:A、B、C。A,B可以并发处理如果C运行,A和B应该等待如果A或B运行C应该等待我会用一个调度组和一个信号量来解决它:publicvardgLoadMain=dispatch_group_create()publicvarsemaLoadMain=dispatch_semaphore_create(1)A,B看起来像这样:dispatch_group_enter(dgLoadMain)dispatch_semaphore_wait(semaLoadMain,DISPATCH_TIME_FOREVER)dispatch_semaphore_signal(semaLoadMa

swift - dispatch_async 与 dispatch_sync 在获取数据中的对比。 swift

看了那么多并行和并发的帖子,我还是很迷惑什么才是正确的取数据方式。例如,在我的项目中,我有一个供用户获取数据的按钮。我的代码如下所示。vararray=[Int]()funcfetchData(){........response(objects:[object],error:NSError?){forobjectinobjects{array.append(object.number)//assumeobject.numberreturnanInt}//confusehere.ShouldIuseasyncherebecauseIamworryiftheuser//clickthef

swift - 如何使用 GCD DispatchWorkItem.notify 避免数据竞争?

在XCode8.3上使用Swift3.1,使用ThreadSanitizer运行以下代码会发现数据竞争(请参阅代码中的写入和读取注释):privatefuncincrementAsync(){letitem=DispatchWorkItem{[weakself]inguardletstrongSelf=selfelse{return}strongSelf.x+=1//DispatchWorkItemdone")}item.notify(queue:.main){[weakself]inguardletstrongSelf=selfelse{return}print(">\(strong

swift 3 DispatchGroup leave 在 helper 类函数中调用时导致崩溃

我正在使用DispatchGroup.enter()和leave()来处理辅助类的reverseG异步函数。问题很明显,我正在使用mainViewController的对象在辅助类中调用mainViewController的dispatchGroup.leave()!有办法吗?当在主视图Controller中声明reverseG时,相同的代码会起作用。classGeo{varobj=ViewController()staticfuncreverseG(_coordinates:CLLocation,_completion:@escaping(CLPlacemark)->()){letg