草庐IT

grand-central-dispatch

全部标签

ios - 使用 GCD 复制大文件 - Dispatch IO 消耗大量内存

我正在将大型文件复制操作从NSStream转换为使用GCD的调度IO实现。当将两个1GB的文件一起复制到一个2GB的文件中时,应用程序使用GCD会消耗2GB的内存。NSStream实现仅占用50MB。在Instruments中,我可以看到start_wqthread调用分配了1MBblock,正如我为调度IO高水位线请求的block大小,但在写入输出流后没有被释放,他们四处闲逛。缓冲区写入输出流后如何释放缓冲区?如果我在Xcode中创建一个全新的OSXCocoa应用程序并将以下代码粘贴到applicationDidFinishLaunching:方法中,它将消耗500-2000MB的内

objective-c - 分派(dispatch)到主队列总是失败

我正在尝试通过iOS上的GCD将一些代码分派(dispatch)到主队列,但即使是最简单的测试也总是失败。最后归结为:staticconstintTICK_INTERVAL=1;#pragmaUIApplicationDelegateimplementation-(void)doTick{if(![NSThreadisMainThread]){NSLog(@"Tryingtodispatch...");dispatch_sync(dispatch_get_main_queue(),^{NSLog(@"test...");});}}-(void)startUpdate{dispatch_

ios - AFNetworking:调度并发队列并在其中运行同步任务

我正在开发的应用程序中使用AFNetworking。对于下载请求,我使用了AFHTTPRequestOperation的setCompletionBlockWithSuccess:failure。这将成功block和失败block与operation相关联,然后使用addOperation将操作添加到NSOperationQueue。AFNetworking创建一个异步线程并在那里运行所有数据。但是,我想将三个操作添加到并发线程中,从而使它们同步运行。在GCD中也称为串行队列。我怎样才能在AFNetworking中实现它?我是否应该创建自己的串行队列,然后在该队列中addOperati

iphone - drawInRect 错误 : CGContextSetFont: invalid context 0x0

我在drawRect:中向UIVIew绘制了一些文本。首先,我计算文本高度,然后计算drawInRect:。下面的代码有效:-(void)drawRect:(CGRect)rect{CGFloattitleHeight=[selfheightForText:_entry.titlewithFont:[UIFontsystemFontOfSize:12.0f]];CGRectr=CGRectMake(54,6,kCellTextWidth,titleHeight);[_entry.titledrawInRect:rwithFont:[UIFonttitleFont]];}然后我在main

ios - 当应用程序置于后台时,GCD 调度的操作不运行

我启动了一个方法,本质上是一个使用dispatch_queue_create然后使用dispatch_async的无限循环(然后代码循环在调度block内)。循环运行完美。但是,当应用程序进入后台时,它会暂停。然后当应用程序进入前台时它会重新启动。如何防止这种情况发生?我一直在找here但似乎优先级不是我可以选择的事情之一。 最佳答案 使用-[UIApplicationbeginBackgroundTaskWithExpirationHandler:]启动后台任务的方法。操作系统会给你十分钟,并在结束时调用expirationHan

ios - UILabel 未使用线程立即显示

我想在线程中加载一些View以避免UI卡住等待加载结束。我不习惯线程,所以我快速测试一下。我的代码只是尝试在线程中创建View并将此View添加到主线程中的当前viewcontrollerView中。我的UIView可以正常工作,但是对于我的UILabel,我必须等待20-60秒才能将它显示在屏幕上。我用UIButton进行了测试,在这种情况下,按钮会立即显示,但按钮内的标签显示的延迟与我的UILabel相同。让它按我想要的方式工作的唯一方法是添加一个[lblsetNeedsDisplay];在主线程中强制立即显示UILabel。为什么?没有这条线是否可以完成这项工作?dispatch

ios - 什么队列应该委托(delegate)代码运行

假设你有一个对象在私有(private)调度队列上做一些内部工作(对于那些不熟悉GCD的人来说想想线程)。该对象在其所做工作的不同时间通知其委托(delegate)人。从代码当前运行的私有(private)队列调用委托(delegate)方法是个坏主意,还是应该在更知名的队列上调用它们?如果是后者,什么队列?似乎主队列可能并不总是你想要的。选项Adispatch_async(private_queue,^{//Dosomework...[self.delegatetellItWorkWasDone:self];});选项Bdispatch_async(private_queue,^{/

ios - 我的大中央调度使用 : Am I using it correctly?

我正在以JSON格式从服务器获取数据。它只有大约150条记录,我最初没有使用GCD,但时不时地,当我点击应用程序中的按钮以查看包含数据的表格时,它会延迟大约几秒钟,然后切换到表格View并显示数据.所以我实现了GCD,现在当我按下按钮时,它会立即切换到tableview,但是加载数据会有几秒钟的延迟,这似乎比预GCD实现要长。所以我不确定我是否正确使用了GCD,或者是否是我的服务器导致了延迟(我认为这是罪魁祸首)。这是GCD在名为retrieveData的方法中的实现,我在viewDidLoad中将其称为[selfretrieveData]:-(void)retrieveData{di

ios - 在不同线程上访问 NSManagedObject 的 objectID?

我的UITableViewCell的部分内容创建因一个对象(CoreDataNSManagedObject)初始访问时发生的故障而延迟。这表现为一个小问题,单元格首先滚动到View中。我决定将对这些对象的访问推送到后台线程。我就是这样实现的,效果很好,但是我们都知道我们不应该在另一个线程中访问一个线程(主线程)的NSManagedObjectContext,但是我们可以在一个线程中获取对象的objectID如果它最初是在第一个线程中获取的,第二个线程?获取objectID需要花费少量时间,我希望将其与其他所有内容一起插入后台。MyRecord*record=[self.frcobjec

ios - 在非主线程上设置一个大的 NSDictionary 属性

我有一个名为Dictionary的类,其中init方法如下所示:-(id)init{self=[superinit];if(self){[selfmakeEmojiDictionaries];}returnself;}-(void)makeEmojiDictionaries{//nextlinetriggersbad_exc_accesserrorself.englishEmojiAllDictionary=@{@"hi":@"?"};//thisisastrong,atomicpropertyofNSDictionary};我的问题是实际的表情符号字典非常大,我想使用GCD在非主线程