1:@property的作用
. 自動(dòng)生成私有屬性.
. 自動(dòng)生成私有屬性的getter setter方法的聲明.
. 自動(dòng)生成私有屬性的getter setter方法的實(shí)現(xiàn).
生成的setter實(shí)現(xiàn): 都是直接賦值.
. @property參數(shù).
. 可以帶參數(shù).
. @property(參數(shù)1,參數(shù)2,參數(shù)3….) 數(shù)據(jù)類型 名稱;
. @property參數(shù)主要分為如下四類.
. 與多線程相關(guān)的.
atomic nonatomic
. 與生成的setter方法實(shí)現(xiàn)相關(guān)的
assign retain
. 生成的getter setter 是可讀寫的還是只讀的封裝.
readwrite readonly
. 修改生成的getter setter方法的名稱
setter getter
. 與多線程相關(guān)的參數(shù)
默認(rèn)值是atomic 如果不寫這兩個(gè)參數(shù)中的1個(gè) 那么默認(rèn)就是atomic。
atomic: 生成的set方法的實(shí)現(xiàn)就是加了線程安全鎖的.
安全性高. 但是效率相對(duì)較低.
nonatomic:生成的set方法的實(shí)現(xiàn)沒有加線程安全鎖.
安全性低 但是效率相對(duì)較高
推薦使用nonatomic 因?yàn)檫@樣效率更高一些.
. 與生成的setter方法的實(shí)現(xiàn)相關(guān)的參數(shù)
默認(rèn)值是assign
assign: 生成的setter方法的實(shí)現(xiàn)就是直接賦值.
retain: 生成的setter方法的實(shí)現(xiàn)就是標(biāo)準(zhǔn)的MRC內(nèi)存管理代碼.
屬性的類型是OC對(duì)象的時(shí)候 就使用retain
屬性的類型是非OC對(duì)象的時(shí)候 就使用assign
生成的是只讀封裝還是讀寫封裝
默認(rèn)值是: readwrite
readwrite: 同時(shí)生成屬性的getter和setter
readonly: 只生成getter 而不生成setter
修改生成的getter setter方法的名稱
默認(rèn)情況下,@propert生成的getter setter方法的名稱都是按照規(guī)范來(lái)生成的.
使用參數(shù)getter或者setter可以修改生成的getter方法和setter方法的名稱.
雖然可以使用參數(shù)來(lái)更改生成的getter、setter方法的名稱但是沒事別亂改.
因?yàn)檫@樣的話 方法名就不遵守規(guī)范了.
注意的問題
. 如果我們使用getter setter參數(shù)修改了生成的getter setter方法名稱.
點(diǎn)語(yǔ)法仍然可以正常使用.
會(huì)自動(dòng)的將點(diǎn)語(yǔ)法轉(zhuǎn)換為調(diào)用修改名稱以后的方法.
. setter方法的名稱永遠(yuǎn)都不要改.
. 當(dāng)屬性的類型是1個(gè)BOOL類類型的時(shí)候.
為了讓我們的代碼語(yǔ)義看起來(lái)更符合人類的思維.
所以我們修改這個(gè)屬性的getter名稱 以isXXX開頭.
. 使用大注意.
retain只是生成的set方法是標(biāo)準(zhǔn)的MRC內(nèi)存管理代碼.
不會(huì)在dealloc中生成release
所以,我們還要手動(dòng)的在dealloc中寫上release的代碼.
. 參數(shù)使用總結(jié)
. 同1組的參數(shù)只能使用其中的1個(gè).否則就會(huì)沖突.
但是getter和setter可以同時(shí)使用 這個(gè)不沖突.
. 使用建議.
. 無(wú)論如何使用nonatomic
. 如果屬性的類型是OC對(duì)象類型使用retain 如果屬性類型是非OC類型使用assign
. 如果希望可讀可寫 就使用readwrite 如果希望只讀 就使用readonly
. 無(wú)論如何不要去修改setter的名稱 只有在屬性的類型是BOOL類型的時(shí)候才去修改getter的名稱為isXXX.
2:@property的用法
程序的內(nèi)存管理模式.分為兩種. MRC和ARC
與多線程相關(guān)的參數(shù).
atomic: 默認(rèn)值
nonatomic
無(wú)論是在ARC還是MRC模式下,都使用nonatomic
retain: 只能使用在MRC模式下. 當(dāng)屬性的類型是1個(gè)OC對(duì)象的時(shí)候,除了循環(huán)引用之外,全部都是使用retain。
assign: 既可以用在MRC中,也可以用在ARC之中,
- 在MRC模式中和ARC模式下. 當(dāng)屬性的類型是1個(gè)非OC對(duì)象類型的時(shí)候. 使用assign
在MRC模式下,如果出現(xiàn)循環(huán)引用. 一端使用retain 一端使用assign
strong: 只能使用在ARC模式下,當(dāng)屬性的類型是1個(gè)OC對(duì)象的時(shí)候,除了循環(huán)引用之外,全部都是使用strong
weak: 只能使用在ARC模式下,當(dāng)出現(xiàn)循環(huán)引用的時(shí)候. 一端使用strong 一端使用weak
readwrite: 可以使用在ARC模式和MRC模式下,代表同時(shí)生成屬性的getter、setter
readonly: 可以使用在ARC模式和MRC模式下 代表只成屬性的getter
修改生成的getter setter的名字: 在ARC和MRC中都可以使用.
@property參數(shù): 在MRC中使用retain的 用strong來(lái)代替就可以了.