1.有alloc,new,copy建立出來的對象就必須有release,在類中是retain對oc類型對成員在該類對dealloc方法中也要release
2.一旦對象直接有引用關系,那麼就一定有retain,同時在主對象銷毀時,也必須對其引用對對象release。但是對象引用時,在retain時
注意是否引用對時同一個對象,若是不同對象就得先release舊對象,再retain新對象
代碼:
-(void)setDog:Dog dog
{
if(dog!=_dog)
{
[_dog release];
[dog ratain];
_dog=dog;
}
}
舉例:一個人買了一輛車,那麼現在這個人擁有了這輛車,也就是車的retain一次,當這個人買了新車了,那麼之前那輛車就和這個人沒有關系了
那麼就的release一次舊車,然後再retain一次新車,若這輛車沒有換,那麼就不做任何操作。如果人挂了的話,這輛車就會可能給别人,所
以,必須再人挂的時候,将車release一次,相當于解除了這個人和這輛車的關系了
[email protected]關鍵字,用于簡化我們頻繁的寫set,get的代碼,他将會自動生産對于的方法,和字段(都是有一定的命名規範的,setXx ,xx,_xx)
@property的參數:
a.set方法記憶體管理的參數(各參數不能同時有)
retain:會自動release舊對象,retain新對象,适用于oc類型對象,如2代碼
assign:直接指派給對象成員,适用于非oc類型的對象
copy:release舊值,copy新值
b.是否生成set方法 (各參數不能同時有)
readwrite:可讀可寫,即set和get方法都會生成
readonly:隻讀,隻生成get方法
c.多線程管理(各參數不能同時有)
nonatomic:性能高,通常都是用該參數
atomic:性能低,預設的參數
d.setter和getter重設方法的名稱
setter:給set方法重命名,但是必須有冒号 ' : '
getter:給get方法重命名,一般用在bool類型的屬性上
eg。 @property (nonatomic,readwrite,assign,setter=abc: ) int age
@property (nonatomic,retain) Dog dog
當用了setter或getter重命名方法時,再使用該對象時可以直接用 對象.成員名稱 來取值或指派,工具會自動檢測時再用get還是
set方法的
[email protected] 關鍵字:聲明一個類,但是沒有類裡的實作,僅僅時做一個聲明,給編譯器看的,再運作的時候才去找實作
代替的import導入檔案
使用的好處:解決裡兩個類互相引用的問題(import時不能互相導入的)
提高類程式的性能(用import的話,每次被導入的檔案被改動,都會重新複制一份到目前類中,消耗性能,而class不用管)
5.當兩個類互相引用時,再各自當dealloc方法中就必須對引用對對象release一次,這樣就導緻兩個對象被咬死,無法釋放記憶體,
解決方案:再其中任意一個類中,将引用另一個類對熟悉對property參數寫成assign
轉載于:https://www.cnblogs.com/hui1107464497/p/4508787.html