//
// main.m
// Block基本使用:一种数据类型,应用在动画,多线程,集合遍历,网络请求回调。
// 用来保存一段代码,在恰当的时候拿出来调用。功能类似于函数。函数不能嵌套定义,block可以,
// 函数指针和block是一样的,相当于代码指针。 #import <Foundation/Foundation.h> void printRose(int num)
{
for (int i = ; i < num; ++i) { printf(" {@} \n");
printf(" | \n");
printf(" \\|/ \n");
printf(" | \n");
}
} int sum(int value1, int value2)
{
return value1 + value2;
}
int main(int argc, const char * argv[]) { //printRose();
// void代表指向的函数没有返回值
// ()代表指向的函数没有形参
// (*roseP)代表roseP是一个指向函数的指针
// void (*roseP) ();
// roseP = printRose;
// roseP(); // 定义一个block变量,
// block和函数一样,可以没有返回值,也没有形参,也可以没有返回值有形参,也可以有返回值没有形参,也可以有返回值有形参
// 所以, 在定义一个block变量的时候, 也需要告诉该变量将来保存的代码有没有返回值和形参 // void代表block将来保存的代码没有返回值
// ()代表block将来保存的代码没有形参
// (^roseBlock) 代表reseBlock是一个block变量, 可以用于保存一段block代码,把*换成^, void (^roseBlock) ();
// 如果block没有参数, 那么^后面的()可以省略
roseBlock = ^(){
printf(" {@} \n");
printf(" | \n");
printf(" \\|/ \n");
printf(" | \n");
};
// 要想执行block保存的代码, 必须调用block才会执行
roseBlock();
roseBlock(); printRose(); void (*roseP)(int);
roseP = printRose;
roseP(); void (^roseBlock1) (int);
roseBlock1 = ^(int num){
for (int i = ; i < num; ++i) { printf(" {@} \n");
printf(" | \n");
printf(" \\|/ \n");
printf(" | \n");
} };
roseBlock1(); int (*sumP)(int, int);
sumP = sum;
NSLog(@"sum = %i", sumP( , )); int (^sumBlock) (int, int);
sumBlock =^(int value1, int value2){
return value1 + value2;
};
NSLog(@"sum = %i", sumBlock(, )); // block是一种数据类型 int (^printBlock)(int)= ^int (int num){
for (int i=; i<num; ++i) {
printf("--------\n");
}
return ;
};
printBlock(); int a = ;
int b;
b = ;
return ;
}
//
// main.m
// Block和typedef
// #import <Foundation/Foundation.h> int sum(int value1, int value2)
{
return value1 + value2;
} int minus(int value1, int value2)
{
return value1 - value2;
} typedef int (*calculte)(int, int); // 注意: 利用typedef给block起别名, 和指向函数的指针一样, block变量的名称就是别名
typedef int (^calculteBlock)(int , int); int main(int argc, const char * argv[]) { int (*sumP)(int, int);
sumP = sum; calculte sumP1 = sum;
NSLog(@"sum = %i", sumP1(, )); int (*minusP)(int, int);
minusP = minus; calculte minusP1 = minus;
NSLog(@"minus = %i", minusP1(, )); int (^sumBlock)(int , int ); calculteBlock sumBlock1 = ^(int value1, int value2){
return value1 + value2;
};
NSLog(@"sum = %i", sumBlock1(, )); int (^minusBlock)(int , int); calculteBlock minusBlock1 = ^(int value1, int value2){
return value1 - value2;
};
NSLog(@"minus = %i", minusBlock1(, )); return ;
}

oc61--block的更多相关文章

  1. Objective-C中block的底层原理

    先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...

  2. iOS 键盘添加完成按钮,delegate和block回调

    这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...

  3. python中IndentationError: expected an indented block错误的解决方法

    IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进

  4. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  5. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  6. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

  7. Block解析(iOS)

    1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...

  8. CSS学习笔记——包含块 containing block

    以下内容翻译自CSS 2.1官方文档.网址:https://www.w3.org/TR/CSS2/visudet.html#strut 有时,一个元素的盒子的位置和尺寸根据一个确定的矩形计算,这个确定 ...

  9. 用block做事件回调来简化代码,提高开发效率

       我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和de ...

  10. 关于多个block问题

    在某个添加文本的页面中,leftbarbutton是删除(直接将数组中的这个string删除),rightbarbutton是完成,分别对应两个block,完成的block是一开始写的,写到了view ...

随机推荐

  1. HashMap中capacity、loadFactor、threshold、size等概念的解释

    约定 约定前面的数组结构的每一个格格称为桶 约定桶后面存放的每一个数据称为bin bin这个术语来自于JDK 1.8的HashMap注释. size size表示HashMap中存放KV的数量(为链表 ...

  2. ASLR(Address space layout randomization)地址空间布局随机化

    /*********************************************************************  * Author  : Samson  * Date   ...

  3. day11-函数对象、名称空间和作用域

    目录 函数对象 函数的嵌套 名称空间和作用域 内置名称空间 全局名称空间 局部名称空间 作用域 全局作用域 局部作用域 global和nonlocal 函数对象 在Python中,一切皆对象,函数也是 ...

  4. PHP 设计模式--序言

    面向对象是PHP5之后增加的功能,是PHP走向现代语言的一个标志. 在过程式设计时代,PHP以学习成本低.入门快的特点赢得很多WEB开发者的青睐,但同时也限制了PHP的发展. 借鉴Java和C++之后 ...

  5. Python-暑期实训day 1

    python基础: 一 编程语言 什么是编程语言? 上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质.在编程的世界里,计算机更像是人的奴隶,人类 ...

  6. Fiddler构造请求

    Fiddler工具是一个http协议调试代理工具,它可以帮助程序员测试或调试程序,辅助web开发. Fiddler工具可以发送向服务端发送特定的HTTP请求以及接受服务器回应的请求和数据,是web调试 ...

  7. 68.document增删改原理

    主要知识点 document增的原理 document删的原理 document改的原理 一.document增的原理 一个document存入es大致要分以下几个步骤 (1)数据写入buffer, ...

  8. Problem 56

    Problem 56 https://projecteuler.net/problem=56 Powerful digit sum A googol (10100) is a massive numb ...

  9. NFA到DFA实例

    下面图使用NFA表示的状态转换图, 使用子集构造法,有如下过程, ε-closure(0) = {0, 1, 2, 3, 4, 6, 7}初始值,令为AA = {0, 1, 2, 3, 4, 6, 7 ...

  10. Huawei-R&S-网络工程师实验笔记20190607-STP生成树协议(基本配置、桥优先级、根桥选举、根端口、路径开销、边缘端口)

    >Huawei-R&S-网络工程师实验笔记20190607-STP生成树协议(基本配置.桥优先级.根桥选举.根端口.路径开销.边缘端口) >>实验开始,先上拓扑图参考: &l ...