- 記述全局變量的地方有Block語法時
- Block語法的表達式中不使用應截獲的自動變量時
該Block為_NSConcreteGlobalBlock類對象赴捞。即Block配置在程序的數(shù)據(jù)域中。除此之外的Block語法生成的Block為_NSConcreStackBlock類對象,設置在棧上盈罐。
那么將Block配置在堆上的_NSConcreteMallocBlock類在何時使用呢?
配置在全局變量上的Block潜叛,從變量作用域外也可以通過指針安全地使用絮爷。但設置在棧上的Block咬腕,如果其所屬的變量作用域結(jié)束欢峰,該Block就被廢棄。由于__block變量也配置在棧上涨共,同樣地纽帖,如果其所屬的變量作用域結(jié)束,則該__block 變量也會被廢棄举反。
將配置在棧上的Block復制到堆上懊直,這樣即使Block語法記述的變量作用域結(jié)束,堆上的Block還可以繼續(xù)存在火鼻。