今天在寫**的時候,遇到了block一直exc_bad_access的問題,之前一直覺得block應該像int一樣直接assign就可以,不會存在記憶體的問題,今天查了資料才知道block是繼承自nsobject的,一樣有記憶體問題,特此記錄一下。block記憶體管理的規則:
1,block指標會在方法或函式結束後release掉,此時記憶體是儲存在stack裡。
2,如果要在儲存block指標,需要用到copy方法(類似於nsobject),此時記憶體儲存在heap裡。
3,block函式體裡的變數會被自動retain,等block結束掉後會release。
4,__block 字首標明的變數,不會自動reatin。
block copy時的注意事項:
1,在block裡如果直接操作self,則self會自動retain。
2,在block裡如果操作類變數,則變數所屬的類會自動retain
block 記憶體管理
block簡介 copy一段 block作為c語言的擴充套件,並不是高新技術,和其他語言的閉包或lambda表示式是一回事。需要注意的是由於objective c在ios中不支援gc機制,使用block必須自己管理記憶體,而記憶體管理正是使用block坑最多的地方,錯誤的記憶體管理 要麼導致retu...
block的記憶體管理
block的記憶體管理 block變數是儲存在棧記憶體中的,所以宣告屬性時,應該使用copy屬性,將其複製到堆記憶體中。block在dealloc中釋放時,使用函式 block release 假如在customview中宣告了乙個block,在customviewcontroller中建立了乙個c...
iOS的block記憶體管理
初始情況下 block本身 block修飾的變數以及在block內部使用的變數都是在棧裡的。block修飾的變數的位址會作為實參傳入block塊內部 暫時先這麼理解,實際比較複雜 block使用的外部變數被const拷貝到了block內部。也就是block使用的外部變數和這個外部變數本身沒有關係。c...