關於Block的我的總結

原文地址數組


1.block的設計初衷是爲了方便多核並行運算;函數

2.block能夠和GCD配合使用,GCD的API很大程度上基於block,固然也能夠脫離block運行,好比傳統的函數指針或上下        文指針;但實踐證實,當配合block時,GCD很是簡單易用,並能發揮其最大能力;(block和dispatch quenespa

3.若是一方法包含了block的實現部分,而且該實現部分引用了方法中定義的棧變量,block會對該變量進行一次只讀拷貝,        而且而後在block中使用該只讀拷貝;若是須要同步使用或者修改該變量就應該加上 "__block"來修飾該變量;.net

    a)若是該變量是數組,則能夠修改,由於數組拷貝的是數組自己;設計

    b)對於 static 變量,全局變量,在 block 中是有讀寫權限的,由於在 block 的內部實現中,拷貝的是指向這些變量的指針。指針

    c) __block 變量的內部實現要複雜許多,__block 變量實際上是一個結構體對象,拷貝的是指向該結構體對象的指針。對象

4.內聯block和非內聯block:非內聯指的是block實現部分在調用的方法以外;blog

    a)非內聯(inline) block 不能直接訪問 self,只能經過將 self 看成參數傳遞到 block 中才能使用,而且此時的 self 只能經過 setter 或 getter 方法訪問其屬性,不能使用句點式方法。但內聯 block 不受此限制。get

    b)內聯 block 能夠直接引用 self,可是要很是當心地在 block 中引用 self。由於在一些內聯 block 引用 self,可能會致使循環引用同步

相關文章
相關標籤/搜索