iOS block種類和切換
block 分為三種 NSGlobalBlock,NSStackBlock, NSMallocBlock。
- NSGlobalBlock:類似函式,位於text段;
- NSStackBlock:位於棧記憶體,函式返回後Block將無效;
- NSMallocBlock:位於堆記憶體。
NSGlobalBlock我們可以通過是否引用外部變數來識別,未引用外部變數即為NSGlobalBlock,可以當做函式使用。否則是NSStackBlock。
NSMallocBlock只需要對NSStackBlock進行copy操作就可以獲取,但是retain操作就不行
- Block_copy與copy等效,Block_release與release等效;
- 對Block不管是retain、copy、release都不會改變引用計數retainCount,retainCount始終是1;
- NSGlobalBlock:retain、copy、release操作都無效;
- NSStackBlock:retain、release操作無效,必須注意的是,NSStackBlock在函式返回後,Block記憶體將被回收。即使retain也沒用。容易犯的錯誤是[[mutableAarry addObject:stackBlock],(補:在arc中不用擔心此問題,因為arc中會預設將例項化的block拷貝到堆上)在函式出棧後,從mutableAarry中取到的stackBlock已經被回收,變成了野指標。正確的做法是先將stackBlock copy到堆上,然後加入陣列:[mutableAarry addObject:[[stackBlock copy] autorelease]]。支援copy,copy之後生成新的NSMallocBlock型別物件。
- NSMallocBlock支援retain、release,雖然retainCount始終是1,但記憶體管理器中仍然會增加、減少計數。copy之後不會生成新的物件,只是增加了一次引用,類似retain;
- 儘量不要對Block使用retain操作。
更詳細的block的內容,請訪問原博文:http://www.cnblogs.com/hanjun/p/3767394.html
相關文章
- jquery另外一種類似tab切換效果jQuery
- iOS 切換鍵盤iOS
- ios 卡片切換效果iOS
- iOS 橫豎屏切換iOS
- iOS開發系列--檢視切換iOS
- iOS Block探究iOSBloC
- iOS--BlockiOSBloC
- iOS AVPlayer之無縫切換播放(類似今日頭條視訊播放效果)iOS
- CUDA和CUDNN版本切換DNN
- iOS學習筆記04 檢視切換iOS筆記
- iOS 視訊播放之切換清晰度iOS
- iOS實現超酷頁面切換動畫特效iOS動畫特效
- iOS __weak、__block使用iOSBloC
- ios之Block研究iOSBloC
- IOS Block 塊用法iOSBloC
- ios 全面解析blockiOSBloC
- ubuntu 介面和終端切換Ubuntu
- Web前端主題切換的幾種方案Web前端
- 基於多種場景DataGuard切換方案
- javascript實現tab切換的四種方法JavaScript
- 代理IP常見的三種切換方式
- iOS block巢狀block中weakify的使用iOSBloC巢狀
- 精講RestTemplate第2篇-多種底層HTTP客戶端類庫的切換RESTHTTP客戶端
- 程式切換(上下文切換)
- [iOS]終極橫豎屏切換解決方案iOS
- iOS開發之APP內部切換語言iOSAPP
- iOS中使用UISegmentControl進行UITableView切換iOSUIView
- 小程式類似抖音視訊整屏切換
- html兩種方法來實現tab切換效果HTML
- iOS Block淺淺析iOSBloC
- iOS - Block探究系列一iOSBloC
- iOS block 反向傳值iOSBloC
- iOS __block修飾符iOSBloC
- iOS-Block全解iOSBloC
- 5 切換和故障轉移操作
- iOS-block迴圈引用詳解和應用iOSBloC
- 一、IOS類和方法iOS
- Vue路由切換 & Axios介面取消重複請求Vue路由iOS