7.__weak 和 _Unsafe_Unretain 的區(qū)別晌该?assign 與weak肥荔、 __block 與 __weak、strong 與copy的區(qū)別

  • weak 修飾的指針變量气笙,在指向的內(nèi)存地址銷(xiāo)毀后次企,會(huì)在 Runtime 的機(jī)制下,自動(dòng)置為 nil潜圃。
  • _Unsafe_Unretain不會(huì)置為 nil缸棵,容易出現(xiàn) 懸垂指針,發(fā)生崩潰谭期。但是 _Unsafe_Unretain 比 __weak 效率高堵第。

1.assign 與weak區(qū)別

assign適用于基本數(shù)據(jù)類(lèi)型吧凉,weak是適用于NSObject對(duì)象,并且是一個(gè)弱引用踏志。

assign其實(shí)也可以用來(lái)修飾對(duì)象阀捅。那么我們?yōu)槭裁床挥盟揎棇?duì)象呢?因?yàn)楸籥ssign修飾的對(duì)象(一般編譯的時(shí)候會(huì)產(chǎn)生警告:Assigning retained object to unsafe property; object will be released after assignment)在釋放之后针余,指針的地址還是存在的饲鄙,也就是說(shuō)指針并沒(méi)有被置為nil,造成野指針圆雁。對(duì)象一般分配在堆上的某塊內(nèi)存忍级,如果在后續(xù)的內(nèi)存分配中,剛好分到了這塊地址伪朽,程序就會(huì)崩潰掉轴咱。

那為什么可以用assign修飾基本數(shù)據(jù)類(lèi)型?因?yàn)榛A(chǔ)數(shù)據(jù)類(lèi)型一般分配在棧上烈涮,棧的內(nèi)存會(huì)由系統(tǒng)自己自動(dòng)處理朴肺,不會(huì)造成野指針。

weak修飾的對(duì)象在釋放之后坚洽,指針地址會(huì)被置為nil戈稿。所以現(xiàn)在一般弱引用就是用weak。weak使用場(chǎng)景:

在ARC下,在有可能出現(xiàn)循環(huán)引用的時(shí)候酪术,往往要通過(guò)讓其中一端使用weak來(lái)解決器瘪,比如: delegate代理屬性,通常就會(huì)聲明為weak绘雁。
自身已經(jīng)對(duì)它進(jìn)行一次強(qiáng)引用,沒(méi)有必要再?gòu)?qiáng)引用一次時(shí)也會(huì)使用weak援所。比如:自定義 IBOutlet控件屬性一般也使用weak庐舟,當(dāng)然也可以使用strong。

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

strong 與copy都會(huì)使引用計(jì)數(shù)加1住拭,但strong是兩個(gè)指針指向同一個(gè)內(nèi)存地址挪略,copy會(huì)在內(nèi)存里拷貝一份對(duì)象,兩個(gè)指針指向不同的內(nèi)存地址

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

__block是用來(lái)修飾一個(gè)變量滔岳,這個(gè)變量就可以在block中被修改
__block:使用 __block修飾的變量在block代碼塊中會(huì)被retain(ARC下會(huì)retain杠娱,MRC下不會(huì)retain)

__weak:使用__weak修飾的變量不會(huì)在block代碼塊中被retain
同時(shí),在ARC下谱煤,要避免block出現(xiàn)循環(huán)引用 __weak typedof(self)weakSelf = self;

4.1 block變量定義時(shí)為什么用copy摊求?block是放在哪里的?

block本身是像對(duì)象一樣可以retain刘离,和release室叉。但是睹栖,block在創(chuàng)建的時(shí)候,它的內(nèi)存是分配在棧(stack)上茧痕,可能被隨時(shí)回收野来,而不是在堆(heap)上。他本身的作于域是屬于創(chuàng)建時(shí)候的作用域踪旷,一旦在創(chuàng)建時(shí)候的作用域外面調(diào)用block將導(dǎo)致程序崩潰曼氛。通過(guò)copy可以把block拷貝(copy)到堆,保證block的聲明域外使用令野。

特別需要注意的地方就是在把block放到集合類(lèi)當(dāng)中去的時(shí)候搪锣,如果直接把生成的block放入到集合類(lèi)中,是無(wú)法在其他地方使用block彩掐,必須要對(duì)block進(jìn)行copy构舟。

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

4.2 block 為什么不用strong?

block如果用到了self堵幽,就會(huì)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

轉(zhuǎn)自:https://github.com/liberalisman/iOS-InterviewQuestion-collection/blob/master/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/7.%E7%AC%AC%E4%B8%83%E9%A2%98.md

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朴下,一起剝皮案震驚了整個(gè)濱河市努咐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌殴胧,老刑警劉巖渗稍,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異团滥,居然都是意外死亡竿屹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)灸姊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拱燃,“玉大人,你說(shuō)我怎么就攤上這事力惯⊥胗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵父晶,是天一觀的道長(zhǎng)哮缺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)甲喝,這世上最難降的妖魔是什么尝苇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上茎匠,老公的妹妹穿的比我還像新娘格仲。我一直安慰自己,他們只是感情好诵冒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布凯肋。 她就那樣靜靜地躺著,像睡著了一般汽馋。 火紅的嫁衣襯著肌膚如雪侮东。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天豹芯,我揣著相機(jī)與錄音悄雅,去河邊找鬼。 笑死铁蹈,一個(gè)胖子當(dāng)著我的面吹牛宽闲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播握牧,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼容诬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了沿腰?” 一聲冷哼從身側(cè)響起览徒,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颂龙,沒(méi)想到半個(gè)月后习蓬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡措嵌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年躲叼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铅匹。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡押赊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出包斑,到底是詐尸還是另有隱情,我是刑警寧澤涕俗,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布罗丰,位于F島的核電站,受9級(jí)特大地震影響再姑,放射性物質(zhì)發(fā)生泄漏萌抵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绍填。 院中可真熱鬧霎桅,春花似錦、人聲如沸讨永。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卿闹。三九已至揭糕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锻霎,已是汗流浹背著角。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旋恼,地道東北人吏口。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冰更,于是被迫代替她去往敵國(guó)和親拘荡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353