Tag: 线程安全

应用程序崩溃,因为断言失败 – ,'FBSession:应该只能从单个线程使用'

我在我的应用程序中使用Facebook的SSON。 当我打电话给我的方法[self openSessionWithAllowLoginUI:NO]; 在块内,它与下面的错误消息崩溃。 *** Assertion failure in -[FBSession checkThreadAffinity], /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBSession.m:1571 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'FBSession: should only be used from a single thread' *** First throw call stack: (0x2f2c2fd3 0x39a42ccf 0x2f2c2ead 0x2fc6fd5b 0x407c27 0x4050a5 0x406ab1 0x405c43 0x40662d 0x39f2a833 0x39f2a81f 0x39f2a777 0x2f28d8f1 0x2f28c1c5 0x2f1f6f4f 0x2f1f6d33 0x340fb663 0x31b4216d 0x7fdc7 0x2f0c0) libc++abi.dylib: terminating […]

iOS的swift:generateCGImagesAsynchronouslyForTimes需要太长时间,冻结应用程序?

我使用以下代码asynchronous获取video缩略图: let imgGenerator = AVAssetImageGenerator(asset: asset) imgGenerator.generateCGImagesAsynchronouslyForTimes([NSValue(CMTime: CMTimeMake(1, 30))]) {(time1, image, time2, result, error) -> Void in if (result == .Succeeded) { dispatch_async(dispatch_get_main_queue()) { thumbnailImageView.image = UIImage(CGImage: image!) } NSLog("SUCCESS!") } } 我不明白为什么它冻结的应用程序,但例如,如果我用这20个tableview单元格需要超过20秒加载和应用程序不会继续和显示视图完成下载之前。 为什么我在这里失踪?

Swift 3-从主线程更新UI

我想在后台线程中加载数据,并在主线程上更新tableview / UI。 根据这里所说的关于线程的内容,我想知道下面的代码是否可以解决这个问题。 我试图加载更多的数据作为用户滚动到一个特定的索引,并希望确保UI不冻结由于线程。 谢谢! func loadMore () { guard !self.reachedEndOfItems else { return } self.offset = self.offset! + 10 print("load more offset: \(self.offset)") var start = 0 var end = 0 isPullToRefresh = false let userCreds = UserDefaults.standard var getReqString = "" if userCreds.bool(forKey: "client_journal") == true || userCreds.bool(forKey: "user_journal") == true { […]

为什么需要为每个线程创buildABAddressbookRef?

苹果说: 重要:ABAddressBookRef的实例不能被多个线程使用。 每个线程都必须创build自己的实例。 但为什么? 我知道一些特定的类或操作必须在主线程中完成。 而且我知道一些对象不是线程安全的(这意味着如果这些对象被两个不同的线程同时访问,将会导致问题)。 但是,如果您可以确保线程不安全的对象在任何时候只被一个线程访问,那么应该没有问题。 我到目前为止是否理解正确? 我不明白的是,为什么会像ABAddressbookRef这样的对象需要为每个线程创build? 为什么苹果会这样说呢? 如果只是线程不安全,苹果可能会说这是线程不安全的,处理时要小心。 但为什么需要为每个线程创build一个? 有什么理由我不知道吗? ABAddressbookRef的实现是否依赖于创build它的线程? PS:我记得核心数据还说,需要为每个使用它的线程创buildManagedObjectContext。

核心数据并发队列风格MOC获取者线程安全

我直接从NSManagedObjectContext 文档直接感到困惑。 基于队列的托pipe对象上下文的setter方法是线程安全的。 你可以直接在任何线程上调用这些方法。 最大的问题是在ManagedObjectContext上的setter方法,而不是在这个上下文所拥有的ManagedObjects中。 还是两者兼而有之? 特别是如果对于私人队列MOC对象这样的话: [privateContext setPersistentStoreCoordinator:self.persistentStoreCoordinator]; 线程安全无论执行这个线程的线程,但会像这样: [myPrivateQueueOwnedManagedObject setTitle:@"My Title]; 也是线程安全?,这个文档确实含糊不清,但我的理解是,这不会是线程安全的是正确的吗? 如何获取ManagedObjectContext中的属性(如询问persistentStoreCoordinator属性)是否是线程安全的? 我的理解是,它不会。 另外,一直以来我的理解是某些Managed Object属性(如objectID)是线程安全的,不需要使用performBlock:或performBlockAndWait来访问:受pipe对象上是否存在线程安全的其他任何属性?

在后台线程上search

我试图在我的iPhone应用程序中search几千个对象,但search滞后很多 – 在每次击键之后,UI冻结1-2秒。 为了防止这种情况,我必须在后台线程上执行search。 我想知道是否有人在后台线程上search一些技巧? 我在NSOperation读了一下,search了网页,但没有find有用的东西。

cordova显示警告为“线警告:花了毫秒。 “在iOS中

"THREAD WARNING: ['Console'] took '81.661865' ms. Plugin should use a background thread." 运行iOS Phonegap项目。 同样的一些剩余的插件像地理定位和文件系统。 由于我是Phonegap新手,可以请任何人告诉我如何在后台线程上运行插件。 我也检查了这一点 。 我们可以忽略这个线程警告,还是与iOS Phone-gap中的内存问题有关 谢谢

如何将代码块分派到iOS中的同一线程?

问题的主要方面:关于iOS。 我可以以某种方式派发代码块,他们将(a)在后台运行,(b)在同一个线程中运行? 我想在后台运行一些耗时的操作,但是这些操作必须在同一个线程上运行,因为它们涉及资源,不能在线程之间共享。 进一步的技术细节,如果需要的话:这是关于为Apache Cordova实现一个sqlite插件,这是一个移动平台上的HTML5应用程序的框架。 这个插件应该是Cordova的插件API中的WebSQL的一个实现。 (这意味着,不可能将整个事务包装在单个块中,这样可以使一切变得更容易)。 以下是Cordova文档中的一些代码: – (void)myPluginMethod:(CDVInvokedUrlCommand*)command { // Check command.arguments here. [self.commandDelegate runInBackground:^{ NSString* payload = nil; // Some blocking logic… CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:payload]; // The sendPluginResult method is thread-safe. [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; }]; } 但据我所知,不能保证,那些派发的代码块(请参阅runInBackground )将在同一个线程上运行。

进程间SQLite线程安全(在iOS上)

我试图确定如果我的SQLite访问数据库是在iOS上线程安全的。 我正在编写一个非App Store应用程序(或可能是一个启动守护程序),所以苹果的批准不是问题。 有问题的数据库是内置的sms.db ,所以肯定操作系统也访问这个数据库的读写。 我只想能够安全地阅读它。 我读过这个关于阅读从多个进程与SQLite : 多个进程可以同时打开同一个数据库。 多个进程可以同时做一个SELECT。 但是,只有一个进程可以随时对数据库进行更改。 我明白,线程安全可以从sqlite编译出来,而sqlite3_threadsafe()可以用来testing这个。 在iOS 5.0.1上运行 int safe = sqlite3_threadsafe(); 产生2的结果。 据此 ,这意味着互斥锁可用 。 但是,这并不意味着它正在使用。 我并不完全清楚线程安全是在每个连接,每个数据库还是全局基础上dynamic启用的。 我也读过这个 。 看起来像sqlite3_config()可以用来启用安全的multithreading,但是当然,我没有控制权,或者操作系统本身可能如何使用这个调用(我?)的可见性。 如果我在应用程序中再次进行调用,是否会安全地读取数据库,还是只能解决使用相同sqlite3数据库句柄的应用程序中多个线程的并发访问冲突? 无论如何,我的问题是… 我可以安全地阅读这个数据库,也可以通过iOS访问,如果是的话,如何?

线程安全的UIImage

我知道苹果正式推荐UIKit只能在主线程中使用。 不过,我也听说UIImage自iOS 4.0以来就是线程安全的。 我找不到任何支持这一说法的文件。 有没有人有任何信息来支持这一说法? 作为一个用于存储数据和解码图像数据的类,如果devise得当,UIImage应该是线程安全的。