iOS_屬性修飾符簡(jiǎn)單介紹.


.@property

1>readwrite,readonly,assign,retain,copy,nonatomic屬性的作用

@property是一個(gè)屬性訪(fǎng)問(wèn)聲明,擴(kuò)號(hào)內(nèi)支持以下幾個(gè)屬性:

1.1> getter setter

getter=getterName,setter=setterName,設(shè)置setter與getter的方法名

1.2> weak assign strong copy

assign? 用于非指針變量。用于基礎(chǔ)數(shù)據(jù)類(lèi)型 (例如NSInteger)和C數(shù)據(jù)類(lèi)型(int, float, double, char, 等),另外還有id,其setter方法直接賦值,不進(jìn)行任何retain操作

weak? ? 用于指針變量,比assign多了一個(gè)功能,當(dāng)對(duì)象消失后自動(dòng)把指針變成nil,由于消息發(fā)送給空對(duì)象表示無(wú)操作,這樣有效的避免了崩潰(野指針),為了解決原類(lèi)型與循環(huán)引用問(wèn)題

strong? 用于指針變量,setter方法對(duì)參數(shù)進(jìn)行release舊值再retain新值

copy? ? 用于指針變量,setter方法進(jìn)行copy操作,與retain處理流程一樣,先舊值release,再copy出新的對(duì)象,retainCount為1。這是為了減少對(duì)上下文的依賴(lài)而引入的機(jī)制。copy是在你不希望a和b共享一塊內(nèi)存時(shí)會(huì)使用到。a和b各自有自己的內(nèi)存。

1.3> readwrite,readonly,設(shè)置可供訪(fǎng)問(wèn)級(jí)別

1.4> nonatomic,非原子性訪(fǎng)問(wèn),不加同步,多線(xiàn)程并發(fā)訪(fǎng)問(wèn)會(huì)提高性能。注意,如果不加此屬性,則默認(rèn)是兩個(gè)訪(fǎng)問(wèn)方法都為原子型事務(wù)訪(fǎng)問(wèn)。所以約定俗成只在主線(xiàn)程更新UI,防止多線(xiàn)程設(shè)置UI屬性,出現(xiàn)資源搶奪現(xiàn)象

2> 如何避免循環(huán)引用

兩個(gè)對(duì)象相互強(qiáng)引用,都無(wú)法release,解決辦法為一個(gè)使用strong,一個(gè)使用assign(weak)

3> delegate的屬性為什么使用assign/weak

避免出現(xiàn)循環(huán)引用,場(chǎng)景如UITableViewController強(qiáng)引用視圖UITableView,而該視圖的代理又是控制器,為避免循環(huán)引用,讓delegate為弱引用

weak 和 assign?


weak和assign都是引用計(jì)算不變,兩個(gè)的差別在于,weak用于object type,就是指針類(lèi)型,而assign用于簡(jiǎn)單的數(shù)據(jù)類(lèi)型,如int BOOL 等。

assign看起來(lái)跟weak一樣,其實(shí)不能混用的,assign的變量在釋放后并不設(shè)置為nil(和weak不同),當(dāng)你再去引用時(shí)候就會(huì)發(fā)生錯(cuò)誤,崩潰,EXC_BAD_ACCESS.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容