【block】深刻理解block

###__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的

參考連接變量

相關文章
相關標籤/搜索