1.block是什么
block?就是將函數執(zhí)行上下文封裝起來的對象
2.block?有哪些類型
全局block:不訪問任何外部變量
堆block:引用計數為0時銷毀
棧block:隨時可能被銷毀
arc下沒有棧block了马昙。因為block會自動copy變成堆block
3.block作為屬性,用什么關鍵字修飾刹悴?
mrc下:使用copy修飾给猾。因為block申明在棧區(qū),使用copy修飾可以將block從棧區(qū)copy到堆區(qū)颂跨。
arc下:使用copy與strong修飾都可以敢伸。因為就算用strong,程序會自動copy恒削,將block從棧區(qū)copy到堆區(qū)池颈。
4.什么情況下棧上的block會copy到堆上。
(1)手動調用copy方法
(2)對block進行賦值
(3)Block作為函數返回值
(4)調用含有usingBlcock 的方法
5.block對變量的捕獲
全局變量:?不捕獲
局部變量:?捕獲值
靜態(tài)全局變量:?不捕獲
靜態(tài)局部變量:?捕獲指針
6.怎么修改block內的變量
使用__block?修飾變量
使用static?修飾變量
使用全局變量
7.__block?是怎么實現值修改的
變量使用__block修飾后钓丰,會被轉化成一個結構體躯砰,結構體包含五個成員變量:isa指針,指向自身類型的__forwarding指針携丁,flag琢歇,size兰怠,變量名。通過_forwarding李茫,無論是在block中還是在block外訪問block變量揭保,也不管該變量在棧上還是要堆上,都能順利訪問同一個__block變量魄宏。
8.Block修改NSMutableArray?需不需要添加__block秸侣?
不需要,因為只是對數組內容進行操作宠互,并不是修改他的內存地址味榛。