iOS weak 記憶體釋放問題

2022-01-28 22:23:02 字數 968 閱讀 9935

我們都知道weak 關鍵字可以解決記憶體不釋放問題,但是使用上有些講究。

看**:

import uikit

var str = "

hello, playground

"class

name

}class

person

}let person =person()

person.test()

執行之後,控制台並沒有輸出name deinit,也就是說 name物件並沒有被釋放。

再看下這段**:

import uikit

var str = "

hello, playground

"class

name

}class

person

}let person =person()

person.test()

執行後,輸出了name deinit.

從這上面兩個對比中,我們可以看出 weak 宣告的指標,當被當做右值時,所代表的也是物件的位址,和strong型的指標沒有區別。

把乙個weak的指標再賦給乙個strong型的指標,這個stong型的指標就會把相應物件進行強引用。

看乙個實際問題:下面這段**就是錯誤的! 我們在寫block時,常常記得使用

weak var weakself =self 宣告乙個變數,之後在block中使用

weakself 來防止迴圈引用。這種做法好用的原因,是因為我們自己實現的block中,不會把weakself當做右值對乙個強指標進行賦值。而 timer的預設實現裡,我認為是有這種賦值的,從而導致了迴圈引用。

class

playerscene: skscene

vc記憶體釋放問題

在vc製作mfc之靜態dll時使用new分配記憶體後在使用delete時有時會報錯並且機率比較高,主要有下面的原因 一 記憶體已經被delete過,二 記憶體訪問越界,vc分配記憶體,除了分配你需要的記憶體空間外還會分配一些管理 單元,就在你分配空間的上界和下界,比如記憶體邊界標誌 0xfdfdfd...

CvSeq 的記憶體釋放問題

key words opencv,cvseq,cvreleasememstorage cvseq 是opencv裡動態結構中的一種非常重要的型別,主要由sequence header和sequence data組成。cvcreateseq int seq flags,int header size,...

UWSGI關於記憶體釋放問題

bin bash ps ef grep p project pid awk xargs kill 9 ulimit n 20000 usr local env project bin uwsgi s 127.0.0.1 7001 m r 200 p 4 evil reload on as 100 e...