2013-04-02 105 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

相關問題