內(nèi)存管理 引用計數(shù) 深淺拷貝
常量區(qū):可變和不可變
內(nèi)存管理原則
/**1.誰創(chuàng)建。誰釋放 alloc relese/autorelese
2.誰持有,誰釋放 retain relese/autorelese
* 3.沒有retain和alloc和COPY就不需要release,有就一定要釋放
<1>引用計數(shù):就是看見alloc . copy retain 的時候就說明該對象的引用計數(shù)加一了,就得給出相對應(yīng)的release來釋放它,手動釋放完對象后,系統(tǒng)會自動調(diào)用dealloc方法,來釋放自己的屬性,但是基本數(shù)據(jù)類型不需要釋放,因為引用計數(shù)只對對象起作用,在dealloc方法中先釋放自己的屬性,最后在釋放父類的屬性,dealloc方法是在當(dāng)對象的引用計數(shù)為1時系統(tǒng)再次調(diào)用release方法時。系統(tǒng)就會自動走這個dealloc方法
? (void)dealloc{
? [_name realese];
? [super dealloc];
? }
<2>輸出引用計數(shù)的方法:[對象名.方法名 stu1.retainCount ];
<3>釋放順序和初始話是相反的:先釋放自己,在釋放父類的
在Mac中,當(dāng)所有的對象都被釋放的時候我們會調(diào)用deall方法
方法實現(xiàn)時的兩種選擇
<1>@required 這個是必須實現(xiàn)的,也是默認(rèn)的
<2>optional 這個是可選的,當(dāng)我們沒有選擇的時候一般用的是默認(rèn)的,也就是必須實現(xiàn)的方法
判斷類里面的這個方法有沒有實現(xiàn):
深拷貝與淺拷貝
<1>淺拷貝是將p的內(nèi)容賦給另一個指針q。(p里面存儲的是地址)這樣兩個指針指向同一個內(nèi)存地址。
深拷貝是另外開辟一塊存儲空間。將p指向的地址中的內(nèi)容復(fù)制到新開辟的存儲空間。而q則指向新開辟的存儲空間。
<2>深拷貝與淺拷貝
淺拷貝:就是指將A的名字復(fù)制給B,但是更改B的名字的時候,A的名字不會改變
深拷貝:對象,對象內(nèi)部的引用均復(fù)制。然后更改B對象屬性的時候,A對象的屬性也會跟著改變
不可變字符串的引用計數(shù)為什么是整數(shù)的最大值:它的引用計數(shù)永遠(yuǎn)都是-1