2013-04-02 67 views
1

我有一个运行同步算法的应用程序。调试和发布之间的区别

当我以调试模式(在我的iPhone 5上)构建并运行它时,它一切正常。

但是,当我将它归档并上载到TestFlight,然后下载并安装到同一个iPhone 5中时,部分同步无效。

它不会崩溃或任何事情,它只是不会运行该部分的同步。

愚蠢的是它是一个单独的函数内没有运行的代码行。该函数中的其他所有内容都会运行。

我不知道从哪里开始寻找这个。

编辑

与明道帮助我发现究竟为什么和代码位没有运行。

功能是...

- (void)uploadData 
{ 
    NSLog(@"pushing photos"); 
    for (StoredImage *storedImage in self.recordArray) { 
     NSURL *url = [self urlForImageUpload:storedImage]; 

     if (url == nil) { 
      continue; 
     } 

     ImageUploadOperation *uploader = [[OJFImageUploadOperation alloc] init]; 
     uploader.image = storedImage.image; 
     uploader.url = url; 
     [self.recordQueue addOperation:uploader]; 
    } 
} 

当我设置的优化级别为“最快,最小”看来惹这个功能了的顺序。

当它进入时,我可以看到数组中有一个对象,它进入循环。但是它完全跳过第一行NSURL *url = [self urlForImageUpload:storedImage];并且结束。所以上传永远不会开始,它会移动到下一个项目上。

+0

我唯一的想法是,如果调用在NSAssert方法中,那么它将变成一个无操作。 – borrrden

+0

您的应用程序是否有权执行此类操作? –

+0

此时我没有使用NSAssert。我只是添加了一些TestFlight检查点,以确定哪些位未被运行。 – Fogmeister

回答

9

版本默认配置使用不同的代码优化比调试配置,所以一些代码行可以进行优化,跳过

你可以查看/修改配置在 目标 - >构建设置 - >搜索优化级别

+0

谢谢!现在我可以通过将调试优化级别更改为“最快最小”来复制它。但是,我不知道为什么这会起作用? – Fogmeister

+0

这就是优化的目的。如果编译器认为某些代码行不产生任何输出,并且对其他部分没有任何影响,它会跳过这个..我想其他人可以详细说明这个主题。 – Mindaugas

+0

啊,再次感谢。好吧,我已经有了更深入的了解,现在我知道(在你的帮助下)究竟哪个位没有运行。我会补充问题。 – Fogmeister