block N連問(wèn)

Block 與 循環(huán)引用

1霞溪、 在所有的Block中侧漓,使用self 都會(huì)引起循環(huán)引用嗎咒劲?
 ?答:不一定.循環(huán)引用的原因是相互指引,相互是關(guān)鍵.如果相互這一層關(guān)系達(dá)不到就沒(méi)有所謂的循環(huán)引用

2继薛、 UIView動(dòng)畫為什么不會(huì)引起循環(huán)引用?
 ?答:UIView的調(diào)用的是類方法,當(dāng)前控制器不可能強(qiáng)引用一個(gè)類 爽待,所以循環(huán)無(wú)法形成

3损同、 masory為什么不會(huì)引起循環(huán)引用?
 ?答:UIView的調(diào)用的是類方法,當(dāng)前控制器不可能強(qiáng)引用

4鸟款、AFN為什么不會(huì)引起循環(huán)引用?
 ?答:不一定分情況膏燃, AFN無(wú)循環(huán)是因?yàn)榻^大部分情況下,你的網(wǎng)絡(luò)類對(duì)象是不會(huì)被當(dāng)前控制器引用的何什,這時(shí)就不會(huì)形成引用環(huán)组哩。

5、那么什么情況下會(huì)引起循環(huán)引用处渣?
? 1伶贰、 強(qiáng)引用自定義的block. 里面再次調(diào)用self,導(dǎo)致的循環(huán)引用.
? 2 、循環(huán)引用的發(fā)生的條件就是強(qiáng)持有這個(gè)block ,并且被block里面的加入的對(duì)象強(qiáng)持有.
? 3罐栈、使用NSNotification 使用系統(tǒng)自帶的block 會(huì)發(fā)生循環(huán)引用.如下:

     [[NSNotificationCenter defaultCenter] addObserverForName:@"" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * note) {
    NSLog(@"%@",self.view);
  }];

6黍衙、循環(huán)引用解決辦法?
?答:
? 1荠诬、 事前避免琅翻,我們?cè)跁?huì)產(chǎn)生循環(huán)引用的地方使用 weak 弱引用,以避免產(chǎn)生循環(huán)引用柑贞。
? 2望迎、事后補(bǔ)救,我們明確知道會(huì)存在循環(huán)引用凌外,但是我們?cè)诤侠淼奈恢弥鲃?dòng)斷開(kāi)環(huán)中的一個(gè)引用,使得對(duì)象得以回收涛浙。

block 與 內(nèi)存管理

1康辑、 block是什么數(shù)據(jù)類型?
?答:block其實(shí)是一個(gè)結(jié)構(gòu)體 可反編譯查看cpp文件

2轿亮、 block為什么對(duì)它內(nèi)部的對(duì)象默認(rèn)強(qiáng)引用呢疮薇?
?答:block會(huì)對(duì)它內(nèi)部的對(duì)象強(qiáng)引用一次。應(yīng)該是為了防止內(nèi)部的對(duì)象離開(kāi)對(duì)象的代碼環(huán)境不至于被釋放掉我注,還能繼續(xù)使用按咒。PS:需要注意的是,對(duì)對(duì)象的強(qiáng)引用不是對(duì)對(duì)象的屬性等強(qiáng)引用

3但骨、 Block作為類變量屬性時(shí)為啥用copy修飾励七?堆棧存儲(chǔ)位置是怎樣的智袭?
? 答:block聲明之后內(nèi)存是存在于棧上的,而不是存在于堆上.它本身的作用域是創(chuàng)建時(shí)的作用域,一旦在作用外的地方調(diào)用block將導(dǎo)致程序崩潰
? 使用retain也可以,但是 block的retain行為 默認(rèn)是用copy實(shí)現(xiàn)的.
? 因?yàn)閎lock變量默認(rèn)為棧變量,為了能夠在block聲明的作用域外使用,所以把block拷貝到堆上去,所以說(shuō)為了block屬性聲明和實(shí)際的操作一致,最好聲明為copy.
? :在Objective-C語(yǔ)言中,一共有3種類型的block:
? 1._NSConcreteGlobalBlock 全局的靜態(tài)block掠抬,不會(huì)訪問(wèn)任何外部變量吼野。
? 2._NSConcreteStackBlock 保存在棧中的block,當(dāng)函數(shù)返回時(shí)會(huì)被銷毀两波。
? 3._NSConcreteMallocBlock 保存在堆中的block(從棧中copy過(guò)去的)瞳步,當(dāng)引用計(jì)數(shù)為0時(shí)會(huì)被銷毀。
? Block內(nèi)捕獲變量會(huì)改變自身存儲(chǔ)位置腰奋,包括讀取變量和__block這種寫變量单起,兩種方式(其實(shí)結(jié)果是一樣的)。
?【在MRC下】:存在棧劣坊、全局嘀倒、堆這三種形式。
?【在ARC下】:大部分情況下系統(tǒng)會(huì)把Block自動(dòng)copy到堆上讼稚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末括儒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锐想,更是在濱河造成了極大的恐慌帮寻,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赠摇,死亡現(xiàn)場(chǎng)離奇詭異固逗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)藕帜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門烫罩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人洽故,你說(shuō)我怎么就攤上這事贝攒。” “怎么了时甚?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵隘弊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我荒适,道長(zhǎng)梨熙,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任刀诬,我火速辦了婚禮咽扇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己质欲,他們只是感情好树埠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著把敞,像睡著了一般弥奸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奋早,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天盛霎,我揣著相機(jī)與錄音,去河邊找鬼耽装。 笑死愤炸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掉奄。 我是一名探鬼主播规个,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姓建!你這毒婦竟也來(lái)了诞仓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤速兔,失蹤者是張志新(化名)和其女友劉穎墅拭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涣狗,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谍婉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镀钓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穗熬。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丁溅,靈堂內(nèi)的尸體忽然破棺而出唤蔗,到底是詐尸還是另有隱情,我是刑警寧澤窟赏,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布措译,位于F島的核電站,受9級(jí)特大地震影響饰序,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜规哪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一求豫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦蝠嘉、人聲如沸最疆。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)努酸。三九已至,卻和暖如春杜恰,著一層夾襖步出監(jiān)牢的瞬間获诈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工心褐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舔涎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓逗爹,卻偏偏與公主長(zhǎng)得像亡嫌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掘而,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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