@property 關(guān)鍵字的區(qū)別詳解:assign 與weak、 __block 與 __weak株扛、strong 與copy的區(qū)別

1.assign 與weak區(qū)別

assign適用于基本數(shù)據(jù)類型尤筐,weak是適用于NSObject對象,并且是一個弱引用洞就。

assign其實也可以用來修飾對象盆繁。那么我們?yōu)槭裁床挥盟揎棇ο竽兀恳驗楸籥ssign修飾的對象(一般編譯的時候會產(chǎn)生警告:Assigning retained object to unsafe property; object will be released after assignment)在釋放之后旬蟋,指針的地址還是存在的油昂,也就是說指針并沒有被置為nil,造成野指針倾贰。對象一般分配在堆上的某塊內(nèi)存冕碟,如果在后續(xù)的內(nèi)存分配中,剛好分到了這塊地址匆浙,程序就會崩潰掉安寺。

那為什么可以用assign修飾基本數(shù)據(jù)類型?因為基礎(chǔ)數(shù)據(jù)類型一般分配在棧上首尼,棧的內(nèi)存會由系統(tǒng)自己自動處理挑庶,不會造成野指針。

weak修飾的對象在釋放之后软能,指針地址會被置為nil迎捺。所以現(xiàn)在一般弱引用就是用weak。weak使用場景:

在ARC下,在有可能出現(xiàn)循環(huán)引用的時候查排,往往要通過讓其中一端使用weak來解決凳枝,比如: delegate代理屬性,通常就會聲明為weak跋核。

自身已經(jīng)對它進行一次強引用岖瑰,沒有必要再強引用一次時也會使用weak叛买。比如:自定義 IBOutlet控件屬性一般也使用weak,當(dāng)然也可以使用strong锭环。

2.strong 與copy的區(qū)別

strong 與copy都會使引用計數(shù)加1聪全,但strong是兩個指針指向同一個內(nèi)存地址,copy會在內(nèi)存里拷貝一份對象辅辩,兩個指針指向不同的內(nèi)存地址

3.__block與__weak的區(qū)別

__block是用來修飾一個變量难礼,這個變量就可以在block中被修改

__block:使用 __block修飾的變量在block代碼塊中會被retain(ARC下會retain,MRC下不會retain)

__weak:使用__weak修飾的變量不會在block代碼塊中被retain

同時玫锋,在ARC下蛾茉,要避免block出現(xiàn)循環(huán)引用 __weak typedof(self)weakSelf = self;

4.1 block變量定義時為什么用copy?block是放在哪里的撩鹿?

block本身是像對象一樣可以retain谦炬,和release。但是节沦,block在創(chuàng)建的時候键思,它的內(nèi)存是分配在棧(stack)上,可能被隨時回收甫贯,而不是在堆(heap)上吼鳞。他本身的作于域是屬于創(chuàng)建時候的作用域,一旦在創(chuàng)建時候的作用域外面調(diào)用block將導(dǎo)致程序崩潰叫搁。通過copy可以把block拷貝(copy)到堆赔桌,保證block的聲明域外使用。

特別需要注意的地方就是在把block放到集合類當(dāng)中去的時候渴逻,如果直接把生成的block放入到集合類中疾党,是無法在其他地方使用block,必須要對block進行copy惨奕。

[arrayaddObject:[[^{? ? NSLog(@"hello!");} copy] autorelease]];

4.2 block 為什么不用strong雪位?

block如果用到了self,就會retain self梨撞,如果是strong的話雹洗,就造成了循環(huán)引用

官方文檔:You should specify copy as the property attribute, because a block needs to be copied to keep track of its captured state outside of the original scope.This isn’t something you need to worry about when using Automatic Reference Counting, as it will happen automatically, but it’s best practice for the property attribute to show the resultant behavior

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市聋袋,隨后出現(xiàn)的幾起案子队伟,更是在濱河造成了極大的恐慌穴吹,老刑警劉巖幽勒,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異港令,居然都是意外死亡啥容,警方通過查閱死者的電腦和手機锈颗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咪惠,“玉大人击吱,你說我怎么就攤上這事∫C粒” “怎么了覆醇?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炭臭。 經(jīng)常有香客問我永脓,道長,這世上最難降的妖魔是什么鞋仍? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任常摧,我火速辦了婚禮,結(jié)果婚禮上威创,老公的妹妹穿的比我還像新娘落午。我一直安慰自己,他們只是感情好肚豺,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布溃斋。 她就那樣靜靜地躺著,像睡著了一般详炬。 火紅的嫁衣襯著肌膚如雪盐类。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天呛谜,我揣著相機與錄音在跳,去河邊找鬼。 笑死隐岛,一個胖子當(dāng)著我的面吹牛猫妙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聚凹,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼割坠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妒牙?” 一聲冷哼從身側(cè)響起彼哼,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎湘今,沒想到半個月后敢朱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年拴签,在試婚紗的時候發(fā)現(xiàn)自己被綠了孝常。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚓哩,死狀恐怖构灸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岸梨,我是刑警寧澤喜颁,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站曹阔,受9級特大地震影響洛巢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜次兆,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一稿茉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芥炭,春花似錦漓库、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至彪薛,卻和暖如春茂装,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背善延。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工少态, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人易遣。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓彼妻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豆茫。 傳聞我的和親對象是個殘疾皇子侨歉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

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