iOS 載入Image的兩種方式

2022-09-09 03:21:14 字數 2176 閱讀 7907

+ (nullable uiimage *)imagenamed:(nsstring *)name;

+ (nullable uiimage *)imagewithcontentsoffile:(nsstring *)path;

這個程式一共載入了三組序列幀動畫:

首先我們使用+ (nullable uiimage *)imagenamed:(nsstring *)name;來載入

當我們把程式執行起來的時候,看下程式記憶體:

當我點選第一組的時候,看下記憶體

那麼我們接下來分析記憶體是為什麼增長到這麼多,而且當程式執行的時候一直不會釋放掉

當執行self.imageview.animationimages = nmarray;就會對陣列進行強引用,從而陣列裡面的內容不會被釋放。所以就會一直在記憶體中不會被釋放掉。

當時當我點選另外一組序列幀的時候,這個陣列會指向另外一組,那麼以前指向的應該就會被釋放掉了。如果是這樣的話,記憶體不會持續增漲,而是當前陣列

指向的一組的記憶體大小而已。實際現象是這個記憶體是一直增漲的,所以當animationimages這個指標指向別的陣列時,它以前指向的陣列並沒有在記憶體中釋放,

而是放到了快取區中。才會造成記憶體一直增漲,不會被釋放。很顯然,我們希望陣列指向另外乙個陣列的時候,要把以前指向的陣列釋放掉,從而釋放記憶體。

這裡就涉及到兩種載入的方法的區別了。接下來我們來看一下用+ (nullable uiimage *)imagewithcontentsoffile:(nsstring *)path;這種方式來載入,

再次看一下記憶體效果

只是換了一種載入方式,別的**沒有做任何改動。接下來看一下記憶體

同樣當我點選第一組序列幀的時候,

當我點第二組序列幀動畫時:

這兩種載入的方法的區別 ,在記憶體方面 ,看起來就顯而易見了。

那麼這兩種載入的方式到底存在著怎麼樣的區別呢。上面我們說了,當使用+ (nullable uiimage *)imagenamed:(nsstring *)name這種方式載入時,當

沒有指標指向的時候,並不會被釋放掉,而是放在了快取區中,所以記憶體就會一直增加。而使用+ (nullable uiimage *)imagewithcontentsoffile:(nsstring *)path

這種方式載入的時候,當沒有指標指向的時候,就會被釋放掉。所以記憶體就不會一直增加。

那麼,這兩種載入的方法,要看不同的情景。當會被多次使用的時候,並且比較小的時候,我們就使用+ (nullable uiimage *)imagenamed:(nsstring *)name

這種方式載入,因為被快取的快取區的時候,下一次再使用該的時候,載入的效率就會提高了。當不經常使用,並且比較大的時候,就使用+ (nullable uiimage *)imagewithcontentsoffile:(nsstring *)path這種方式載入,當使用完畢,直接釋放掉。因為基本不會被重複使用,使用者很少對一組序列幀**看好幾次吧。

通過記憶體的對比,這兩種載入的區別就顯而易見了。

一直有強指標指向。

這樣,對於序列幀動畫的記憶體問題就已經全部解決了。

當不經常使用的時候,就使用imagewithcontentoffile來載入,使用結束以後,直接釋放掉,沒有必要再繼續佔記憶體了。比如 序列幀動畫

頁面載入JS兩種方式

第一種 window.onload function 第二種 document ready function 或簡寫 function 區別 1.執行時間 window.onload必須等到頁面內包括的所有元素載入完畢後才能執行。document ready 是dom結構繪製完畢後就執行,不必等到載...

linux linux驅動載入的兩種方式

動態載入 在系統啟動後,通過insmod或modprobe命令載入.ko核心目標檔案,成功後可通過mknod指令進行掛載節點,不需要的時候可通過rmmod命令來解除安裝模組。優點 1 生成的核心檔案小 2 系統啟動時間短。3 使用靈活。缺點 每次使用都需要通過命令進行載入與解除安裝,操作麻煩。靜態載...

載入xib檔案的兩種方式

一 載入xib檔案的兩種方式 1.方法一 newscell是xib檔案的名稱 nsarray objects nsbundle mainbundle loadnibnamed newscell owner nil options nil 2.方法二 uinib nib uinib nibwithni...