1. 程式人生 > >iOS容易造成迴圈引用的三種場景之Block以及對應的使用方法(二)

iOS容易造成迴圈引用的三種場景之Block以及對應的使用方法(二)

         可以看到在Block結構體中含有isa指標,這就證明了Block其實就是物件,並具有一般物件的所有功能。這個isa指標被初始化為_NSConcreteStackBlock或者_NSConcreteGlobalBlock類的地址。在沒有開啟ARC的情況下,如果Block中包含有區域性變數則isa被初始化為前者,否則就被初始化為後者。而當ARC開啟後,如果Block中包含有區域性變數則isa被初始化為_NSConcreteMallocBlock,否則就被初始化為_NSConcreteGlobalBlock。invoke是一個函式指標,它指向的是Block被轉換成函式的地址。最後的imported variables部分是Block需要訪問的外部的區域性變數,他們在編譯就會被拷貝到Block中,這樣一來Block就是成為一個閉包了。