之前驗證過copy修飾的block种樱,編譯器做了什么蒙袍。詳見文章通過__block的作用深入研究block。
與內(nèi)存有關(guān)的常用修飾關(guān)鍵字有retain,strong,copy,weak
嫩挤,有盛傳前三者作用都一樣害幅,是將棧中的block復(fù)制到堆中。而且很多人不建議用weak
修飾block俐镐,而且關(guān)于weak block
的文章也甚少矫限。
半夜想到這點,突然好奇心起佩抹!
那么就寫個demo驗證了下叼风。
我家??都睡了,不能修仙了棍苹,改天再詳細列一下驗證步驟无宿,先說結(jié)論。
用weak
修飾block
正如你所想枢里,block在使用過之后就會釋放掉(正如那煙火~)
被廣大IOS開發(fā)所畏懼的weakblock的坑在哪里呢孽鸡?
用過即毀~
被釋放掉的block會帶來什么不良影響呢?
如果在block中調(diào)用了控制器或者其他不需要釋放不能釋放的控件或者其他對象栏豺,那就真是爽歪歪了彬碱。要注意的是,不能夠釋放的對象不能出現(xiàn)在block的作用域內(nèi)奥洼。不然會被誤殺的哦巷疼。
weak修飾的block又能做什么呢?
weakblock用來傳值還是可以的灵奖,就是那種基礎(chǔ)數(shù)據(jù)類型啦~基本數(shù)據(jù)類型是無所謂的嚼沿」琅蹋或者回調(diào)過來調(diào)用數(shù)據(jù)持久化儲存數(shù)據(jù)也是極好。
weak修飾的block的意義骡尽?
大概是內(nèi)存優(yōu)化吧遣妥。比如要傳很多數(shù)值的時候,但是又必須在某個控制器的回調(diào)內(nèi)進行處理的時候攀细,傳值過來就可以銷毀箫踩,回收內(nèi)存。恩辨图,大概是這樣班套。
(等有時間補一下探究的代碼肢藐。
(再有時間的時候故河,在研究研究為什么在weakblock內(nèi)調(diào)用wekself都能夠被誤殺。(其實也大致能猜到啦~畢竟block和self都是在棧內(nèi)的吆豹,就算是weakself最終指向的也是self鱼的,銷毀的時候引火上身了hhh重點是怎么引的。痘煤。類似文章似乎不多凑阶。