1. 程式人生 > >__weak和__block的區別

__weak和__block的區別

1.IOS中 __weak 和 __block 的區別

// 蘋果官方文件是: A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier.

大致的意思是:(1) __block 修飾的物件在block 內部進行進行使用時.不要把修飾的物件當做常量,而是當做一個變數來使用.                       (2) __block修飾的物件可以防止出現迴圈引用.

// __weak的介紹蘋果官方文件說明如下: 

_weak specifies a referencethatdoesnot keep the 
referenced object alive. A weak referenceissettonilwhen
there are no strong references totheobject.
__weak 修飾的物件等同於宣告的屬性為weak,所以可以解決block的迴圈引用, 並且_weak 修飾的物件的引用計數為0的時候, 修飾的物件為nil

說了這麼多 _weak和_block的區別:

1.__block不但可以在ARC環境下面使用還可以在MRC環境下面使用,並且可以修飾物件和基本資料型別.
2.__weak 只能在ARC下使用,並且只能修飾物件,不能修飾基本資料型別. 3._block修飾的物件在block 內部可以被修改,而__weak 修飾的物件不能被修改