iOS imageNamed 的快取問題

2021-09-06 15:38:52 字數 1317 閱讀 9921

如題,是不是大家為了方便都這樣載入啊

myimage = [uiimage imagenamed:@"icon.png"];

那麼小心了

這種方法在一些很少,或者很小的程式裡是ok的。

但是,在大量載入的程式裡,請千萬不要這樣做。

為什麼呢 ???????

試想你多了,是什麼後果``````

cache極有可能不會響應 memory warnings and release its objects

所以,用的時候一定要小心的alloc和release

推薦使用

nsstring *path = [[nsbundle mainbundle] pathforresource:@」icon」 oftype:@」png」];

myimage = [uiimage imagewithcontentsoffile:path];

用uiimage載入影象的方法很多,最常用的是下面兩種:

1、用imagenamed函式

[uiimage imagenamed:imagename];

2、用nsdata的方式載入,例如:

1. nsstring *filepath = [[nsbundle mainbundle] pathforresource:filename oftype:extension];

2. nsdata *image = [nsdata datawithcontentsoffile:filepath];

3. [uiimage imagewithdata:image];

由於第一種方式要寫的**比較少,可能比較多人利用imagenamed的方式載入影象。其實這兩種載入方式都有各自的特點。

1)用imagenamed的方式載入時,系統會把影象cache到記憶體。如果影象比較大,或者影象比較多,用這種方式會消耗很大的記憶體,而且釋放影象的 記憶體是一件相對來說比較麻煩的事情。例如:如果利用imagenamed的方式載入影象到乙個動態陣列nsmutablearray,然後將將陣列賦予一 個uiview的物件的animationimages進行逐幀動畫,那麼這將會很有可能造成記憶體洩露。並且釋放影象所佔據的記憶體也不會那麼簡單。但是利 用imagenamed載入影象也有自己的優勢。對於同乙個影象系統只會把它cache到記憶體一次,這對於影象的重複利用是非常有優勢的。例如:你需要在 乙個tableview裡重複載入同樣乙個圖示,那麼用imagenamed載入影象,系統會把那個圖示cache到記憶體,在table裡每次利用那個圖 像的時候,只會把指標指向同一塊記憶體。這種情況使用imagenamed載入影象就會變得非常有效。

無論用哪種方式載入影象,影象使用結束後,一定要記得顯示釋放記憶體。

原文連線:

django rest framework快取應用

在我們web製作過程中進場使用到快取技術,那麼今天python中的一種簡單便捷的快取技術與大家分享 以下是在省 市 區 聯動的位址查詢做的快取處理 使用快取 省市區的資料是經常被使用者查詢使用的,而且資料基本不變化,所以我們可以將省市區資料進行快取處理,減少資料庫的查詢次數。在django rest...

WPF與緩動 四 弧形緩動

wpf與緩動 四 弧形緩動 周銀輝 弧形緩動就是其緩動曲線為一段圓弧,如何我們假設圓弧上的點的斜率為速度的話,那麼可以想像其速度的變化多麼具有戲劇性,其加速或減速來得很突然,與5次緩動差不多.參考以下 圓形緩動 protected override double getcurrentvaluecor...

深度緩紋理

create a texture object storing color glgentextures 1,m udepthtexid glbindtexture gl texture 2d,m udepthtexid gltexparameterf gl texture 2d,gl texture...