IOS iOS开发知识

《iOS高级编程》中的Block:概要规范篇

2019-09-15  本文已影响0人  太阳骑士索拉尔

关于我的仓库

前言

准备工作

Blocks概要

疑惑: p.81 buttonId

int buttonID = 0;

void buttonCallback(int event) {

   NSLog(@"button:%d event = %d", buttonID, event);
}

void setButtonCallback(int offset, void (*p)(int)) {

   p(offset);
}

void setButtonCallbacks() {

   for (int i = 0; i < 10; i++) {
       buttonID = i;
       setButtonCallback(0 + i, &buttonCallback);
   }
}

887D7308-7318-4B92-A638-EBFF549147A1

Block语法

与一般C语言函数不同点:

格式

标准格式

ECDEC5C7-C6FF-4F5F-A1B8-DB8BA7F2BB6C
^int (int count){return count + 1;}

省略格式

60F591B8-D410-4FE9-886F-CFC273B52AEB B89A2A1D-FFEB-49F7-867B-721ABAB15A98 40B1C054-38B8-42A4-AD0A-43608AB50B85

block变量

//ex:C语言函数指针
int func(int count) {
  return count + 1;
}

int (*funcptr)(int) = &func;

//这样子下面两个语句代表的含义一样
int res = func(2);
int res = funcptr(2);
2E876C3B-C47B-4345-A03C-5794F45A8996

截获自动变量

int dmy = 256;
int val = 10;
const char  *fmt = "val = %d\n";
void (^blk)(void) = ^{
  
        printf(fmt, val);
    };
    val = 2;
    fmt = "THESE VALUES WERE CHANGED. val = %d\n";
    blk();

__block说明符

668D72AD-79AB-47D5-842E-C3CDFCFF8374 EBAFF0CC-6012-43D7-9B20-02DBA469A3DD

截获的自动变量

上一篇 下一篇

猜你喜欢

热点阅读