iosblock在堆和棧中的區(qū)別?
代碼塊Block是蘋果在iOS4開始引入的對C語言的擴展,用來實現(xiàn)匿名函數(shù)的特性,Block是一種特殊的數(shù)據類型,其可以正常定義變量、作為參數(shù)、作為返回值,特殊地,Block還可以保存一段代碼,在需要的時候調用,目前Block已經廣泛應用于iOS開發(fā)中,常用于GCD、動畫、排序及各類回調
注: Block的聲明與賦值只是保存了一段代碼段,必須調用才能執(zhí)行內部代碼
block的三種類型:全局塊、棧塊、堆塊。
根據block在內存中的位置,block被分成三種類型:
類型內存位置介紹__NSStackBlock__棧區(qū)棧內有效,出棧后銷毀。__NSMallocBlock__堆區(qū)copy到堆空間上。可以在定義的那個范圍之外使用。__NSGlobalBlock__全局區(qū)不捕捉任何外部變量,全部信息在編譯器就已確定。