gpt4 book ai didi

objective-c - Objective-C 中的线程 : most efficient way for an update?

转载 作者:行者123 更新时间:2023-11-29 04:58:48 24 4
gpt4 key购买 nike

我有一个 CoreData 应用程序,其中包含每天通过服务器更新一次的动态数据。

更新是在单独的类中处理的,并且在我编写的 AppDelegate 中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.updater = [[Updater alloc] init];
...
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
[updater checkForUpdatesInContext:[self managedObjectContext]];
}

checkForUpdatesInContext 检查一天是否已经过去,然后执行更新过程。

现在,它当然会在主线程上运行,如果正在进行更新,应用程序将“卡住”直到更新完成,这可能需要一段时间,因为创建了新对象,并且还有涉及的图像。所以我的想法是在后台线程或第二个线程或 Objective-C 提供的任何线程上运行它。

我的问题:让 checkForUpdatesInContext 脱离主线程的最有效方法是什么以及如何进行?苹果文档(像往常一样)有些令人困惑。

最佳答案

让更新操作在后台线程中发生并不那么棘手,例如

[self performSelectorInBackground:@selector(updateWithData:) withObject:data];

...

- (void)updateWithData:(NSData *)data {
// I am now in a background thread
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

或者,如果您正在寻找取消后台线程的功能,请阅读 NSOperationNSOperationQueue .

您的问题将是处理多线程和 CoreData :) 您需要阅读 this guide .基本上,您需要确保您的后台线程不使用相同的 NSManagedContext (它必须从同一个 NSPercientStore 创建一个新的 NSManagedContext )并且不在线程之间传递 NSManagedObjects (即仅将对象 ID 传递回 UI 线程,不是对象本身)。

关于objective-c - Objective-C 中的线程 : most efficient way for an update?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7419904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com