2014-10-28 169 views
2

我有一個應用程序,我正在從iOS6更新到iOS8。在這裏和那裏做了一些小的修改以完成編譯之後,我在iPad mini上運行了應用程序,發現性能顯着下降。在一些地方,過去沒有明顯延遲的事情現在經常需要2-3秒才能完成。考慮到我的iPad可能存在問題,我刪除了當前版本,並從AppStore重新下載應用程序。表現回到了以前的狀態。iOS7/iOS8中[UIImage imageNamed]的性能問題

分析代碼後,突出顯示的內容之一是[UIImage imageNamed]中的大量時間。我的應用程序對此進行了很多調用,因爲它具有室內和室外模式,要求動態加載給定視圖上的大部分圖像。在最新的SDK中發生了這種調用嗎?

當我異形的應用,這裏是吃了的時候> 70%

+(UIImage*)imageNamed:(NSString*)rootName extension:(NSString*)extension 
{ 
    NSString* typeName = _isIndoor ? @"inside" : @"outside"; 
    NSString* fullName = [NSString stringWithFormat:@"%@-%@.%@", rootName, typeName, extension]; 
    UIImage* result = [UIImage imageNamed:fullName]; 

    if (result == nil) { 
     NSLog(@"Missing image [name: %@]", fullName); 
    } 

    return result; 
} 

其他一些筆記方法:

  1. 原來的應用程序工作正常,在我的第一代iPad迷你運行iOS8
  2. 該應用程序目前不使用ARC,但我測試切換到ARC w /沒有改善(不奇怪)
  3. 該應用程序不使用資產目錄,bu T I試圖轉換使用資產目錄瓦特/沒有改善(也並不奇怪)
  4. 我做了一些google搜索,但未能找到任何人有相同的問題

回答

1

我承擔[UIImage的imageNamed :]是佔用最多的時間。考慮到事情做得很好,我們才能猜測「搜索」部分是錯誤的。資源在哪裏存儲?主捆綁包還是其他地方?

也imageNamed:應該緩存圖像,使後續調用快速。是這樣嗎?或者後續對相同資源的調用速度是否緩慢?

嘗試在NSImage上使用init方法,該方法使用inBundle參數,並將正確的包傳遞給該方法。這樣,如果搜索文件是問題,則應該更快。