iOS Block

什么是Block

截獲變量

__block修飾符

內(nèi)存管理

循環(huán)引用

什么是Block?

將函數(shù)及其執(zhí)行上下文封裝起來的對(duì)象。

  1. 函數(shù)
  2. 上下文
  3. 對(duì)象

源碼實(shí)現(xiàn),看結(jié)構(gòu)體

*block的本質(zhì)和函數(shù)調(diào)用

截獲變量

  1. 局部變量
  • 基本數(shù)據(jù)類型
    截回其置
  • 對(duì)象類型
    連同所有權(quán)修飾符一起截獲
  1. 靜態(tài)局部變量
    以指針形式截回
  2. 全局變量
    不截獲
  3. 靜態(tài)全局變量
    不截獲

__block修飾符

一般情況下,對(duì)被截獲的變量賦值操作時(shí)候使用__block修飾(賦值: 注意數(shù)組)
否則的話就會(huì)編譯報(bào)錯(cuò)

  • 對(duì)變量進(jìn)行賦值時(shí)候的特點(diǎn)
    需要__block修飾符 ===> 局部變量(基本數(shù)據(jù)類型和對(duì)象類型)
    不需要__block修飾符 ===> 靜態(tài)局部變量、全局變量、靜態(tài)全局變量

  • __block修飾符的變量變成了對(duì)象

  • __forwarding指針是用來干什么的?

Block的內(nèi)存管理

imp.isa = &_NSConcertStackBlock

copy操作

  • 棧上 堆上

  • 堆上 增加其引用計(jì)數(shù)

  • 數(shù)據(jù)區(qū) 什么也不做

  • 棧上Block銷毀
    變量和block都會(huì)被銷毀

  • 棧上Block的Copy
    堆上有對(duì)應(yīng)的的block和__block變量都會(huì)銷毀

  • 棧上Block的Copy又發(fā)生了什么
    棧上Block變量的__forwaording指針指向的自己,copy之后,棧上的__foewarding指針指向堆上的__block變量
  • __forwaordig總結(jié)
  • __forwaordig存在意義
    都可以順利的額訪問同一個(gè)__block變量

block的循環(huán)應(yīng)用

__weak避免產(chǎn)生循環(huán)應(yīng)用

  • 為什么用__weak可以呢?應(yīng)為截獲成員變量是對(duì)象時(shí)候,是對(duì)其修飾符所有權(quán)一起引用的

  • Block總結(jié)
    什么是block?
    為什么block會(huì)產(chǎn)生循環(huán)引用?
    (截獲后會(huì)有強(qiáng)引用,__block下要看是ARC還是MRC)
    怎么理解block截獲變量的特性?

遇到那些循環(huán)應(yīng)用,怎么解決的?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Block基礎(chǔ)回顧 1.什么是Block? 帶有局部變量的匿名函數(shù)(名字不重要,知道怎么用就行),差不多就與C語言...
    Bugfix閱讀 6,909評(píng)論 5 61
  • 前言:Block 是開發(fā)過程中常用便捷的回調(diào)方式,本文簡(jiǎn)單介紹 Block 一、Block 簡(jiǎn)介 Block 對(duì)象...
    夢(mèng)蕊dream閱讀 4,865評(píng)論 5 26
  • 一,概念 Block是將函數(shù)及其執(zhí)行上下文封裝起來的匿名函數(shù)和代碼塊。它是C語言的擴(kuò)充功能。之所以是拓展,是因?yàn)镃...
    攜YOU手同行閱讀 504評(píng)論 0 0
  • Block的本質(zhì) Block是將函數(shù)及其執(zhí)行上下文封裝起來的對(duì)象。Block調(diào)用即是函數(shù)的調(diào)用。 clang(LL...
    FieryDragon閱讀 575評(píng)論 1 6
  • 《Objective-C高級(jí)編程》這本書就講了三個(gè)東西:自動(dòng)引用計(jì)數(shù)、block、GCD,偏向于從原理上對(duì)這些內(nèi)容...
    WeiHing閱讀 10,104評(píng)論 10 69

友情鏈接更多精彩內(nèi)容