在for循环中创建多个线程时iOS崩溃

时间:2013-06-08 11:00:03

标签: ios multithreading crash

这是一个非常简单的例子。我无法解释为什么这些代码行导致崩溃。我只想在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。

任何人都可以解释这种行为吗?

更新

我&#34;解决了#34;问题。当我在每次测试之前执行清理时,崩溃不再发生。

2 个答案:

答案 0 :(得分:0)

我不知道问题是什么,但你应该检查一下: What are the differences between didFinishLaunchingWithOption and viewDidLoad

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

答案 1 :(得分:0)

好的,所以如果你读了苹果纪录片,他们会说:“这个方法是在状态恢复发生之后但在应用程序窗口和其他用户界面显示之前调用的。在此方法返回后的某个时刻,系统调用另一个你的应用委托的方法将应用程序移动到活动(前景)状态或背景状态。“这意味着实际上应用程序在这一点上还没有处于前台状态,在这里你应该存储一个开始你的线程的意图,然后sistem调用方法- (void)applicationDidBecomeActive:(UIApplication *)application,此时你绝对确定您的应用程序处于前台状态且处于活动状态,现在如果您已记录启动线程的意图,则可以执行此操作,并且不要忘记重置意图变量状态