屬性關(guān)鍵字可以分為三種類型:
? ? ????1.讀寫(xiě)權(quán)限的類型: readonly ,readwrite
? ????? 2.原子類 : atomic ,nonatomic
????? ? 3.引用計(jì)數(shù) : retain/strong/copy线婚,assign/unsafe_unretained槐脏,weak
讀寫(xiě)權(quán)限的類型: readonly ,readwrite
? ??????readwrite 是可讀可寫(xiě)特性到忽;會(huì)自動(dòng)生成getter方法和setter方法
????????readonly 是只讀特性 只會(huì)生成getter方法 翎朱,不會(huì)生成setter方法????
原子類: atomic nonatomic
? ??????atomic是保證賦值和獲取是線程安全的瘾英。 這里說(shuō)的是對(duì)成員屬性的直接賦值和獲取橙依,并代表操作和訪問(wèn)证舟。 對(duì)于atomic的屬性,系統(tǒng)生成的 getter/setter 會(huì)保證 get票编、set 操作的完整性,不受其他線程影響卵渴。atomic對(duì)一個(gè)數(shù)組慧域,進(jìn)行賦值或獲取,是可以保證線程安全的浪读。但是如果數(shù)組進(jìn)行操作昔榴,比如給數(shù)據(jù)加對(duì)象或移除對(duì)象辛藻,是不在atomic的保證范圍。
引用計(jì)數(shù)
????????retain/strong:修飾objc數(shù)據(jù)類型互订,其引用計(jì)數(shù)+1吱肌,修飾的對(duì)象被釋放后,引用計(jì)數(shù)-1
????????assign:修飾基本數(shù)據(jù)類型仰禽,修飾對(duì)象類型時(shí)氮墨,不改變其引用計(jì)數(shù),會(huì)產(chǎn)生懸垂指針吐葵,修飾的對(duì)象在被釋放后,assign指針仍然指向原對(duì)象內(nèi)存地址,如果使用assign指針繼續(xù)訪問(wèn)原對(duì)象的話匆篓,就可能會(huì)導(dǎo)致內(nèi)存泄漏或程序異常
????????weak:不改變被修飾對(duì)象的引用計(jì)數(shù)陆蟆,所指對(duì)象在被釋放后,weak指針會(huì)自動(dòng)置為nil
????????copy:分為深拷貝和淺拷貝
????????????淺拷貝:對(duì)內(nèi)存地址的復(fù)制凤藏,讓目標(biāo)對(duì)象指針和原對(duì)象指向同一片內(nèi)存空間會(huì)增加引用計(jì)數(shù)
????????????深拷貝:對(duì)對(duì)象內(nèi)容的復(fù)制奸忽,開(kāi)辟新的內(nèi)存空間
注:可變對(duì)象的copy和mutableCopy都是深拷貝;不可變對(duì)象的copy是淺拷貝揖庄,mutableCopy是深拷貝栗菜;copy方法返回的都是不可變對(duì)象。
下面我們來(lái)說(shuō)一說(shuō)面試會(huì)被問(wèn)到的知識(shí)點(diǎn):
Q:@property (nonatomic, copy) NSMutableArray * array;這樣寫(xiě)有什么影響抠艾?
A:copy方法返回的都是不可變對(duì)象苛萎,所以array對(duì)象實(shí)際上是不可變的,如果對(duì)其進(jìn)行可變操作如添加移除對(duì)象检号,則會(huì)造成程序crash
Q:strong和weak的區(qū)別腌歉?
A:strong 表示指向并擁有該對(duì)象。其修飾的對(duì)象引用計(jì)數(shù)會(huì)加1.該對(duì)象只要引用計(jì)數(shù)不為0則不會(huì)被銷毀齐苛。當(dāng)然強(qiáng)制將其置為nil也可以銷毀它翘盖。 weak 表示指向但不擁有該對(duì)象。其修飾的對(duì)象引用計(jì)數(shù)不會(huì)增加凹蜂。無(wú)需手動(dòng)設(shè)置馍驯,該對(duì)象會(huì)自行在內(nèi)存中銷毀。
Q:assign 和weak的區(qū)別玛痊?
A:1汰瘫、assign可以修飾對(duì)象和基本數(shù)據(jù)類型, weak只修飾對(duì)象
????2、assign 所修飾的對(duì)象被釋放后擂煞,還會(huì)指向原對(duì)象內(nèi)存地址混弥。weak 所修飾的對(duì)象被廢棄之后,weak 所修飾對(duì)象會(huì)被設(shè)置為nil对省。
Q:淺拷貝和深拷貝的區(qū)別蝗拿?
A:淺拷貝增加引用計(jì)數(shù)晾捏,不產(chǎn)生新的內(nèi)存。 深拷貝不增加引用結(jié)束哀托,會(huì)新分配內(nèi)存