【iOS開發】 iOS如何選擇圖片載入方式:imageNamed和imageWithContentsOfFile的區別
iOS記憶體稀缺,而圖片資源通常又是最佔記憶體的部分之一,因此,選擇如何載入圖片,對於優化應用記憶體佔用量,能起到立竿見影的效果。通常載入圖片的方式有兩種:
一、imageNamed
為什麼有兩種方法完成同樣的事情呢?imageNamed的優點在於可以快取已經載入的圖片。蘋果的文件中有如下說法:
This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method locates and loads the image data from disk or asset catelog, and then returns the resulting object. You can not assume that this method is thread safe.
這種方法會首先在系統快取中根據指定的名字尋找圖片,如果找到了就返回。如果沒有在快取中找到圖片,該方法會從指定的檔案中載入圖片資料,並將其快取起來,然後再把結果返回,下次再使用該名稱圖片的時候就省去了從硬碟中載入圖片的過程。對於相同名稱的圖片,系統只會把它Cache到記憶體一次。
另外,在iOS4及以上系統中,如果是PNG格式的圖片,使用該方法載入時不用再指定檔案的.png字尾,即只寫檔名稱即可。
最後,在iOS4及以上系統中,如果螢幕的scale是2(即高解析度螢幕),該方法會自動使用加上@2x字尾的圖片。比如在高解析度螢幕裝置上要載入名稱為button的圖片,該方法會自動使用名稱為
二、imageWithContentsOfFile或者imageWithData
而imageWithContentsOfFile方法只是簡單的載入圖片,並不會將圖片快取起來,影象會被系統以資料方式載入到程式。當你不需要重用該影象,或者你需要將影象以資料方式儲存到資料庫,又或者你要通過網路下載一個很大的影象時,可以使用這種方式。
三、如何選擇
兩種載入圖片方法的使用方式:
// caching
UIImage *img = [UIImage imageNamed:@"myImage"];
// no caching
UIImage *img = [UIImage imageWithContentsOfFile:@"myImage"];
那麼該如何選擇呢?
如果載入一張很大的圖片,並且只使用一次,那麼就不需要快取這個圖片。這種情況imageWithContentsOfFile比較合適——系統不會浪費記憶體來快取圖片。
然而,如果在程式中經常需要重用的圖片,比如用於UITableView的圖片,那麼最好是選擇imageNamed方法。這種方法可以節省出每次都從磁碟載入圖片的時間。
相關推薦
【iOS開發】 iOS如何選擇圖片載入方式:imageNamed和imageWithContentsOfFile的區別
iOS記憶體稀缺,而圖片資源通常又是最佔記憶體的部分之一,因此,選擇如何載入圖片,對於優化應用記憶體佔用量,能起到立竿見影的效果。通常載入圖片的方式有兩種: 一、imageNamed 為什麼有兩種方法完成同樣的事情呢?imageNamed的優點在於可以快
【移動開發】iOS和Android不規則按鈕解決方案
【寫在前面】如果看完這篇部落格,對你有幫助的話,歡迎加入全棧技術交流群,群內不定時釋出熱門學習資料,也歡迎進行技術交流,對我的部落格有疑問也可以在群裡@我。《全棧技術交流群歡迎你》 好久沒有寫Android和iOS了,最近看看之前寫的專案,別忘了,2333 效果圖 簡單介紹一下介
【iOS開發】iOS移動端架構
引言:一個app的初始階段,必然是先滿足各種業務需求。然後,經過多次版本迭代之後,先前的由於急於滿足需求而導致的雜亂程式碼則會充斥整個專案。而此時,專案有了一定的規模,有了一定數量的開發人員,那麼為了達到快速迭代版本的需求,則是需要有一個強大的架構來支撐。
【iOS開發】判斷app啟動的方式(launchOptions)
iOS app啟動的方式有哪些: 自己啟動(使用者手動點選啟動)urlscheme啟動(關於urlScheme的詳解點選開啟連結)本地通知啟動 (自己寫的本地通知啟動,藍芽模組的啟動,地理圍欄的啟動)遠端通知啟動 (後臺伺服器的推送通知)在appdelegate.m
【iOS開發】---- iOS自動佈局(一)
問題 你想將一個UI 元件放置到螢幕的中央。換句話說,你想你想將一個檢視放置到其父檢視的中央位置,使用限制條件。 方案 建立兩個限制條件:一個是將目標檢視的center.x 位置排列在其父檢視的center.x 位置,並且另外一個是將目標檢視的center.y 位置排列在其父檢視的center.y 位置
【iOS開發】---- iOS自動佈局(二)
- (NSArray *) emailTextFieldConstraints { NSMutableArray *result = [[NSMutableArray alloc] init]; NSDictionary *viewsDictionary = NSDictionaryOfVar
【模組開發】商品購物車的實現——1.功能分析和效果演示
1.工程說明 前面在學習jsp中cookie內容的時候,我們寫了一個demo:商品瀏覽記錄功能的實現。現在,我們將在前面的那個工程上進行優化開發(主要是懶)。 回顧一下前面的那個工程實現了那些功能:商品資訊顯示頁面,單個商品資訊詳情頁面,近五條瀏覽商品記錄的頁面。 那麼
【Qt開發】QTableWidget設定根據內容調整列寬和行高
QTableWidget要調整表格行寬主要涉及以下一個函式 1.resizeColumnsToContents(); 根據內容調整列寬 2.resizeColumnToContents(int col);
【iOS開發】UIWebView載入html時不顯示網路圖片解決辦法
NSString *html = @"<html><body><p>怎麼顯示網路圖片 <img src=\"http://p0.ifengimg.com/pmop/2017/1218/F9636BB16CC72EC34B5FCB78
【iOS開發】launch Images啟動圖片設定(UILaunchImageFile)之002
一、實現效果: 通過直接給圖片起預設的名字,讓app啟動頁自動載入啟動圖片。 二、注意點: ·圖片命名一定要按蘋果官方的指定規則命名,圖片的畫素也要符合規則; ·如果橫豎屏圖片都需要,記得在Xcode中勾選上專案支援橫豎屏。 三、官方描述:
【iOS開發】---- SDWebImage支援webp格式的圖片
什麼是webp?iOS如何支援webp格式的圖片? 什麼是webp? 點選這裡檢視什麼是webp。 iOS如何支援webp格式的圖片? 在iOS的開發中,獲取網路圖片我們基本上都會使用開源庫SD
【iOS開發】Gitlab教程 (一)
一 、gitLab 建立工程 Project name : 工程名字起一個,最好和專案相關; Namespace : 你自己的gitLab工作空間,預設就好; Description : 描述,隨便寫。 Visibi
【iOS開發】SEL和Selector 原理小結
一 、Selector(選擇器)簡介 選擇器是用來選擇一個方法來為一個物件 執行的名稱,或是在編譯原始碼時替換該名稱的 唯一識別符號的名稱。一個選擇器本身不做任何事情。它簡單地識別了一種方法。唯一使選擇器的方法名稱不同於普通字串,編譯器確保選擇器是獨特的。
【iOS開發】一些常見的警告解決方案(更新中。。。)
Unknown pattern color for the Background Color attribute 1.背景色屬性為未知模式的顏色 解決:預設xib裡面控制元件的背景色為Default。如果出現警告,可能是你定義的顏色Xcode啟動
【讀書筆記】iOS-開發技巧-UILabel內容模糊的原因
在非Retina的iPad mini的螢幕上,一個UILabel的frame的origin值如果有小數位數(例如,0.5),就會造成顯示模糊。所以最好用整數值的origin座標。 參考資料:
APP內開啟另一個APP(URL Scheme與openURL)【iOS開發】
目標 平常我們做iOS開發,會經常遇到開啟其他的APP的功能。本篇文章講的就是開啟別人的APP的一些知識。我們的目標是: 開啟別人的APP讓別人開啟我們的APPiOS9的適配問題使用URL Schemes傳遞資料 準備工作 建立一個名為OpenApp的工作空間,用來存放
【iOS開發】陣列的去重(無序和有序)
一、 無序的去重 1.利用NSDictionary的AllKeys(AllValues)方法 可以將NSArray中的元素存入一個字典,然後利用AllKeys或者AllValues取得字典的所有鍵或值,這些鍵或值都是去重的。 程式碼:
【iOS開發】---- tableView背景隨表滾動
最近專案中用到了“圖隨表動”,如下圖所示: 這是一個訂單,需要add shipping insurance以上的部分隨著表格的滾動而滾動,這裡表格是group型別的,所以背景加在cell上是達不到效果的,在code4App上找到了一個例子(
【IOS實戰】UIButton 設定圖片文字垂直居中排列
大道至簡,直接上程式碼 -(void)setButtonContentCenter:(UIButton *) btn { CGSize imgViewSize,titleSize,btnSize; UIEdgeInsets imageViewEdge,ti
【iOS開發】---- 語音識別
最近iOS專案中需要用到語音識別技術(也被稱為自動語音識別,英語:Automatic Speech Recognition, ASR)。去google搜尋了一下,發現語音識別做的不錯的