使用iTween需謹慎 記憶體洩露

2021-06-25 15:27:59 字數 945 閱讀 4004

itween雖然各種效能不盡人意,但是用起來算是相當的傻瓜,可是為了方便使用,這個東西卻不是就可以那麼隨便的使用。

之前發現程式有較為嚴重的記憶體洩露,不需要多久就漲起來幾百兆的記憶體,檢查了很長時間,終於找到最大的洩露源:itween的tweens靜態變數。囉嗦一句就是其實找託管語言的記憶體洩露只需要找靜態變數就可以了,除非你大量使用了非託管的東西。

於是繼續,檢查tweens變數可知,如果你要結束itween的過程,必須呼叫itween.stop方法,否則tweens列表是不會移除這個物件的引數,這個物件的引數就會一直存在。有人會說是你自己使用不當,沒看文件,這裡的確也有這個因素,可是如果你細心就會發現,就算是小心的在每個地方都呼叫了,仍然有不夠小心的地方。比如你突然想移動某個物體,然後想讓這個物體在結束的時候銷毀,你會直接itween.moveto,然後註冊乙個銷毀方法,正常情況下,這個使用是一點問題也沒有的,但是如果你中途自己銷毀了這個物件,那就會洩露,那麼你就需要在銷毀的毀掉裡面加上stop的呼叫,又或者,你在中途想改變移動的目標,你又moveto一次了,這時候原來的itween元件會被替換,於是又是洩露。實際上你就算看了文件,你也不想到不謹慎呼叫stop就會出現洩露,你覺得itween應該處理好了一切,倒不如說,對於託管語言就應該不用太多去關心釋放問題。

不過就目前來說,其他tween工具都還是beta階段,能選擇的不多。我在開始也是為了快速開發而選擇itween,最後卻因為效率不滿意而自己寫了路徑演算法,實際上網上有很多現成的公式,加上參考itween的細節,實現起來也非常快,沒有想象中的複雜,替換itween也很方便,畢竟itween原本就是低耦合,這是優點。

另外想吐槽的一點就是我一直看不懂itween是怎麼做到判斷是否替換自身元件的,比如你呼叫了shake,兩次引數一樣的話,就會保持不變,itween id都是一樣的,如果引數發生改變,那麼itween id將會改變,也就是說已經被替換了。我看了半天也只看到了普通的呼叫一下addcomponent,難道是看漏了什麼關鍵的地方嗎。

微信有危險,使用需謹慎

哈爾濱做小生意的孫麗失蹤4天後,孫麗的家人查到她的一張銀行卡,在兩天時間內被劃走了17000多塊錢,家屬擔心孫麗遭遇不測,就向 報了案。從自助銀行的監控錄影中,證實取錢的人並不是孫麗本人,而是乙個陌生的中年男子。這名男子在10月24號 25號兩天分三次在不同銀行提取了1萬多元現金。根據線索 追查到取...

IOS開發中重寫init方法使用需謹慎

經過大神指點,原來這個問題產生的原因是我錯誤的使用了重寫init方法。我重寫的方法如下,原本打算是在初始化的時候就給view乙個標題和背景色 1 自定義初始化 2 instancetype init 7return self 8 但問題恰恰出現在這個重寫的初始化方法中,具體分析如下 先在首頁中建立乙...

使用self 導致的記憶體洩露

請看第一段 在myobject.m中 self.aobj nsobject alloc init void dealloc 你能否看出這裡的記憶體洩露?接下來看第二段 aobj nsobject alloc init void dealloc 你能否看出這裡是否也有記憶體洩露呢?如果你都能夠很確定的...