草庐IT

objective-c - 如何在主线程外渲染 MKMapView?

大家好!我正在为iPhone开发应用程序。我有表格View和需要向用户显示的位置列表。为此,我在每个表格View单元格中使用了MKMapView。但是当有很多位置时,这个解决方案变得非常慢。我想提高UI性能并将MKMapView替换为UIImageView。所以我需要在一些非主线程中渲染从MKMapView到UIImage的map。我试着这样做:UIGraphicsBeginImageContext(CGSizeMake(64,64));CGContextRefcontext=UIGraphicsGetCurrentContext();[[mapViewlayer]renderInCo

ios - Sprite Kit 是在后台渲染,还是在主线程渲染?它是如何工作的?

documentation显示了SpriteKit的简化运行循环。我想了解他们是如何实现的。SKView调用-update:在SKScene上.然后首先评估Action,然后模拟物理,并让子类调整场景。对场景进行更改后,SKView最后将节点树渲染到屏幕上。我不明白的是细节。SpriteKit是否通过使用不同的线程或GCD队列将场景计算与场景渲染分离?它是在后台执行所有OpenGL渲染调用,还是一切都发生在主线程上?SpriteKit是在什么时候在后台和主线程之间来回切换的,它是如何同步处理场景和渲染场景的呢?如果您的场景更新时间过长,会发生什么情况? 最佳

ios - NSURLConnection sendAsynchronousRequest 完成 block 是否在主线程上执行?

我想知道当我使用NSURLConnectionsendAsynchronousRequest时,是否在主线程上调用了completionHandlerblock。我主要关心的是我是否需要自己在主线程上调度UIKit调用。NSURLConnection的文档没有提到这个细节,除非我错过了。我分析了我的代码,没有内存泄漏,这表明该block是在主线程上执行的。有文档给出明确的答案吗?[NSURLConnectionsendAsynchronousRequest:requestqueue:[NSOperationQueuemainQueue]completionHandler:^(NSURL

iphone - 在 iOS 上从后台线程向主线程发送消息

我有一个iOS应用程序,我在其中完成后台线程上的任务。当每个任务完成时,我想向主线程发送一条消息,以便我可以沿着我的自定义进度条移动到适当的阶段。实现此目标的最简单但最安全的方法是什么?编辑1这是我正在使用的方法:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,(unsignedlong)NULL),^(void){//getbackgroundtasksdone.[self.backgroundbackgroundMethod];});编辑2这是我尝试使用@Madboy的回答的示例。在我

iphone - 一个线程如何确定另一个线程是否已崩溃?

我有一个后台线程正在做大量的工作——加载应用程序。主线程在UIProgressView上显示进度。后台线程是用performSelectorInBackground产生的(不过,如果有不同的方法可以使这个问题更容易解决,我不会采用这种方法)[selfperformSelectorInBackground:@selector(loadAppInBackground)withObject:self];有几次,一个错误导致后台线程崩溃(随着应用程序的发展,出现了不同的错误),导致进度条停止,但用户没有得到任何错误的明确指示。我想检测这种情况并更优雅地失败,而不是简单地挂起直到用户放弃等待。因

ios - 什么需要在主线程上?

我写了一个小定义,叫做ensureInMainThread(而且我经常使用它)。但是,我不确定哪些用户界面方法需要在主线程上被调用。setNeedsDisplay和setNeedsLayout怎么样?对于需要在iOS5.x中的主线程上调用的方法,经验法则是什么?这些问题是相关的(一些低质量的问题和答案,一些非常具体的案例),但我想要一个全面的、单一的好答案:UIViewsetNeedsDisplayNotonmainthread?DoesUIView's-drawRect:havetobecalledonthemainthread?MakeUIImageFromUIViewbutNOT

iphone - 并发且可靠地使用核心数据

我正在构建我的第一个iOS应用程序,理论上它应该非常简单,但我很难让它足够安全,让我有信心将它提交到AppStore。简而言之,主屏幕有一个表格View,在选择一行后,它会转到另一个表格View,该表格View以主从方式显示与所选行相关的信息。基础数据每天从Web服务中以JSON数据形式检索一次,然后缓存在CoreData存储中。删除当天之前的数据以阻止SQLite数据库文件无限增长。所有数据持久化操作都使用CoreData执行,NSFetchedResultsController支持详细TableView。我看到的问题是,如果您在检索、解析和保存新数据时多次在主屏幕和详细信息屏幕之间

关于@autoreleasepool的释放时机,个人看法

建议先在网上搜索@autoreleasepool的文章,看看底层的结构,网上大部分文章都有清楚的描述在ARC下,已经不允许使用NSAutoreleasePool对象了,并且根据官方文档,@autoreleasepool比它更高效,因此这里只讨论@autoreleasepool。@autoreleasepool最重要的两个入口函数如下:void*objc_autoreleasePoolPush(void){returnAutoreleasePoolPage::push();}voidobjc_autoreleasePoolPop(void*ctxt){AutoreleasePoolPage::p

objective-c - 我什么时候需要担心 iOS 应用程序中的线程安全?

在编写通常的ViewController代码时,我可以假设这只会从单个事件循环线程调用吗?我需要什么样的类才能使线程安全?涉及多线程的常见情况有哪些? 最佳答案 concurrencyprogrammingguide很好。这里有一些非常重要的事情要记住。–您应该只从主线程更新UI。这可以让你以微妙的方式...–NSNotifications将在它们被触发的线程中接收。因此,如果您启动一个线程并订阅一个NSNotification来触发一个UI操作,您应该在获取它时检查您所在的线程。如果它不在主线程上,请使用NSObject的perf

ios - 通过示例了解何时使用 dispatch_get_main_queue 和 requiresMainQueueSetup

前一段时间我在这里问过类似的问题:DifferencerequiresMainQueueSetupanddispatch_get_main_queue?我今天回过头来发现我还没有完全掌握它。当我们为iOS编写ReactNative模块时,iOS端有dispatch_get_main_queue并且react-native需要requiresMainQueueSetup。对于以下包和用例,应该如何使用其中的哪一个?asq-react-native-device-导出包ID等常量的包asq-react-native-sensors-允许从设备陀螺仪和其他传感器订阅和接收数据的包asq-re