###__block到底是怎麼的狀況函數
看懂了,仍是要收藏,省得忘記了,又找不到!
###瞭解Blockcode
Block 是c的擴展,在OC中沒有GC,因此本身來進行內存管理,錯誤的內存管理會致使crash. Block 是攜帶了函數,同時也有函數執行環境
###你不知道的內存
Block在內存中的位置分爲三種類型NSGlobalBlock,NSStackBlock, NSMallocBlock NSGlobalBlock:相似函數,位於text段; NSStackBlock:位於棧內存,函數返回後Block將無效; NSMallocBlock:位於堆內存。
###外部變量的存取get
1.局部自動變量,在Block中只讀。Block定義時copy變量的值,在Block中做爲常量使用,因此即便變量的值在Block外改變,也不影響他在Block中的值。 2.全局變量或static靜態變量在內存中的地址是固定的,Block在讀取該變量值的時候是直接從其所在內存讀出,獲取到的是最新值,而不是在定義時copy的常量。 3.被__block修飾的變量稱做Block變量。 基本類型的Block變量等效於全局變量、或靜態變量。
###注:BLOCK被另外一個BLOCK使用內存管理
此時,另外一個BLOCK被COPY到堆上時,被使用的BLOCK也會被COPY。但做爲參數的BLOCK是不會發生COPY的
參考連接變量