Block爲何使用Copy?

block:本質就是一個object-c對象
block:存儲位置,可能分爲3個地方:代碼去,堆區、棧區(ARC狀況下會自動拷貝到堆區,所以ARC下只能有兩個地方:代碼去、堆區)
代碼區:
不訪問棧區的變量(如局部變量),且不訪問堆區的變量(alloc建立的對象),此時block存放在代碼去。
堆區:
訪問了處於棧區的變量,或者堆區的變量,此時block存放在堆區。–須要注意實際是放在棧區,在ARC狀況下會自動拷貝到堆區,若是不是ARC則存放在棧區,所在函數執行完畢就會釋放,想再外面調用須要用copy指向它,這樣就拷貝到了堆區,strong屬性不會拷貝、會形成野指針錯區。函數

 

by:ml指針

相關文章
相關標籤/搜索