我有一个可以读取100 K行的for循环。
当我启动这个函数时,它会阻塞我的UI,直到它完成为止。
for (Item* sp in items){
data = [data stringByAppendingFormat:@"\"%@\",\"%@\","\n", ....];
}
我怎样才能把它放到单独的线程中,这样它就不会阻塞UI了?
我正在尝试加快我的应用程序的启动速度,其中一个想法是使用异步分派队列。我有两个任务,可以在启动时相邻运行(实际上是相当大的任务)。但是,它们都有一个在主线程上运行的重要部分(主要是UI代码)。
dispatch_async(dispatch_get_main_queue, ^{
[self doTask1];
});
dispatch_async(dispatch_get_main_queue, ^{
[self doTask2];
//Will task 2 take turns with task 1, or will task 2 start after 1 i
我试图理解队列类型之间的区别。据我所知,有三种类型:
无论顺序如何,都会尽快执行全局队列并发块。
主队列-串行块在提交时执行。
专用队列-串行
我想知道的是:当dispatch_sync和dispatch_async提交到每种队列时,两者有什么区别?到目前为止,我是这样理解的:
dispatch_sync(global_queue)^
{
// blocks are executed one after the other in no particular order
// example: block 3 executes. when it finis
有一个关于串行任务和dispatch_queue的问题我的示例是:有1101个项目要插入到sqlite中,我使用“insert into select union all select”来做插入作业,但sqlite只支持500个项目一次,所以分离数据并逐个插入它们,问题是我的DB操作模型处理dispatch_queue(串行队列)中的所有sql,当完成一个任务时使用块进行回调。
所以,如果我想在task1成功完成后做task2,我不能,因为分派队列对这种设计有任何想法或建议,或者如果保留分派队列,我该怎么办?
当前代码:
for(int i = 0; i<n;i++) //n task
当我将任何数据上传到Parse云时,它会将行存储在表的顶部。因此,每次添加新行时,都会将其存储在顶部。
但是,当我检索所有行时,数据是从下向上检索的。
假设一开始云是空的。
Push a
Cloud Looks like : a
Push b
Cloud Looks like : b a
Push c
Cloud Looks like : c b a
And now when I retrieve the data, i get it like: a b c
现在我想要的是,当数据被插入时,它被放置在第二个位置,而不是第一个位置。
示例:
Initial Cloud :
我的应用程序中有以下分派队列:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^ {
[activeModel freeUpMallocedData];
// UI Updates have to be made on the main thread, so request from GCD.
dispatch_queue_t queue = dispatch_get_main_queue();
dispatc
我正在使用JSON从互联网上提取信息,当我试图在检查数据之后执行segue时,segue崩溃了!这是我的代码:
passWord = password.text
userName = username.text
var link = "http://ksa-sms.com/SpecialapiK/getUser.php?return=json&username=\(userName!)&password=\(passWord!)"
if let url = NSURL(string: link){