草庐IT

ios - 为什么 NSManagedObjectContext Queue 在主线程上执行?

当我向类型为NSPrivateQueueConcurrencyType的MOC发送一个performBlock消息时,如下所示:[self.privateManagedObjectContextperformBlockAndWait:^{if([[NSThreadcurrentThread]isMainThread]){NSLog(@"executingonthemainthread!!");}…}];我发现,默认情况下,它在主线程上执行。上面代码中的条件触发,问题导航器指示执行发生在NSManagedObjectQueue中的Thread1上。这让我很费解,因为Apple告诉我们“每

iphone - 为什么我更愿意为每个新线程或 NSOperation 创建一个 NSManagedObjectContext 而不是在主线程上调用核心数据?

一些开发人员已经告诉我,我可以为每个新线程创建一个新的NSManagedObjectContext实例,以使CoreData线程安全。然后我只需要处理之后的合并。对我来说,这听起来像是很多额外的代码和开销。这个解决方案不好是有原因的吗?来了:我不会为每个新线程或每个NSOperation创建一个新的MOC,而是在主线程上执行MOC更改,就像我们从UIKit中了解到的那样。我会调用-performSelectorOnMainThread:...waitUntilDone:YES并摆脱所有核心数据并发问题。优点:-不必为每个线程/NSOperation创建一个新的MOC。-不必将MOC合并

ios - 主线程上的 AFNetworking 和 NSURLConnection

编辑:屏幕截图中突出显示的行是我遇到的问题,为什么NSURLConnection在我不调用它时运行在[NSThreadmain]上,AFNetworking是。我正在为我的项目使用AFNetworking,但是在Instruments中运行TimeProfiler时,我看到NSURLConnection的主线程上有很多事件,我觉得这不是我想要的。我的方法是-(void)parseArticles{NSMutableArray*itemsToParse=[[FMDBDataAccesssharedDatabase]getItemsToParse];NSMutableArray*opera

ios - 是否可以检查主线程是否空闲/耗尽主运行循环?

我刚刚阅读了以下帖子并尝试实现其中描述的方法:WritingiOSacceptancetestsusingKiwi-BeingAgile那里描述的所有内容都可以完美运行。但!当我运行验收测试时,有一件事打破了确定性。这是Github上的repo,帖子的作者在那里推送了他的实验(可以在页面底部的评论中找到):https://github.com/moredip/2012-Olympics-iOS--iPad-and-iPhone--source-code/tree/kiwi-acceptance-mk1考虑一下他用来点击View的这段代码:-(void)tapViewViaSelecto

objective-c - 在主线程上调用 dispatch_sync(dispatch_get_global_queue()) 会导致 app 到 "hang"吗?

//Methodcalledwhenabuttonisclicked-(void)handleClickEvent{dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{[selfbackgroundProcessing];});//SomecodetoupdatetheUIoftheview....[selfupdateUI];....}1)当按下View上的按钮时,在主线程上调用handleClickEvent。2)我使用了dispatch_sync(),因为在计算backgroun

ios - 为什么将UIViewController释放在主线程上?

我最近在一些Objective-C代码中偶然发现了TheDeallocationProblem。之前在Block_releasedeallocatingUIobjectsonabackgroundthread中的StackOverflow上讨论了该主题。我想我了解这个问题及其含义,但是可以肯定的是,我想在一个小的测试项目中重现它。我首先创建了自己的SOUnsafeObject(=应该始终在主线程上释放的对象)。@interfaceSOUnsafeObject:NSObject@property(strong)NSString*title;-(void)reloadDataInBackg

objective-c - 在主线程上运行方法的宏

我想要一种简单的方法来将代码放在方法的开头,这将强制该方法仅在主线程上运行(因为该方法会更新UI元素)。目前,我有类似的东西:if(![NSThreadisMainThread]){[selfperformSelectorOnMainThread:_cmdwithObject:_resultswaitUntilDone:NO];return;}但我想要一种方法将其包含在宏中,而无需为该方法输入参数。似乎应该有某种方法可以遍历传递给当前方法的参数列表并创建NSInvocation或类似的。有什么想法吗? 最佳答案 这行得通吗?#def

iphone - NSFileManager removeItemAtPath 锁定主线程

我正在开发一款可以删除大量文件的应用程序。当我调用NSFileManager的removeItemAtPath方法时,应用程序的UI会锁定,直到操作完成(这可能需要一段时间)。我尝试通过调用使用performSelectorInBackground的方法来修复此问题,但它不起作用。有什么想法吗?提前致谢。 最佳答案 您可以尝试使用GCD在后台线程中执行此操作。dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^(void){[[NS

ios - 滚动 UICollectionView 阻塞主线程

我有一个使用AVSampleBufferDisplayLayer播放H264的视频解码器,并且一切正常,直到我在同一个ViewController上滚动UICollectionViewController。这似乎会阻塞导致应用程序崩溃的主线程。我曾尝试使用dispatch_async将此代码放入单独队列中的一个block中,但仍然存在相同的阻塞问题以及解码器的进一步性能问题。dispatch_async(sampleQueue,^{[sampleBufferQueueaddObject:(__bridgeid)(sampleBuffer)];if([avLayerisReadyForM

ios - 如何在不立即执行选择器的情况下创建一个不是主线程的 NSThread

我想创建一个不是主线程的工作线程,这样我就可以调用...[selfperformSelector:@selector(doStuff)OnThread:self.myWorkerThreadwithObject:nil];...在我的代码中的许多位置。我如何创建一个线程……任何线程并将其分配给一个变量,以便我可以在我的代码中反复使用它。NSThreaddetachNewThreadWithSElector只会创建一个用于运行那个选择器。我需要创建一个线程并以某种方式使用它。我正在使用iOS,需要在writerThread上执行我所有的CoreData写入。我每次都需要使用相同的线程(不