0

这是一个非常简单的例子。我无法解释为什么这些代码行会导致崩溃。我只想在 for 循环中创建多个线程。在 AppDelegate 中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    for (int i = 0; i < 5; i++) {

        [self performSelectorInBackground:@selector(workInBackground)
                               withObject:nil];
    }
    return YES;
}

-(void)workInBackground{

}

该应用程序仅有时会崩溃(lldb 崩溃,iPhone 模拟器 5.0 - 6.1,Xcode 版本 4.6.2)。我使用 ARC。

谁能解释这种行为?

更新

我“解决”了这个问题。当我在每次测试之前执行清理时,不再发生崩溃。

4

2 回答 2

0

我不知道问题是什么,但您应该检查一下: didFinishLaunchingWithOption 和 viewDidLoad 之间有什么区别

如果您有多个要在后台运行的任务,也可以使用NSOperationQueue 。

于 2013-06-08T11:53:09.363 回答
0

好的,所以如果您阅读苹果文档,他们会说:“在状态恢复发生之后但在您的应用程序窗口和其他 UI 呈现之前调用此方法。在此方法返回后的某个时间点,系统会调用您的应用程序委托的另一个将应用程序移动到活动(前台)状态或后台状态的方法。” 这意味着实际上此时的应用程序尚未处于前台状态,您应该在此处存储启动线程的意图,然后系统调用方法- (void)applicationDidBecomeActive:(UIApplication *)application,此时您绝对确定您的应用程序处于前台状态并处于活动状态,现在如果您记录了启动线程的意图,则可以执行此操作,并且不要忘记重置意图变量状态

于 2013-06-08T13:04:14.920 回答