//
//  main.m
//  Block基本使用:一种数据类型,应用在动画,多线程,集合遍历,网络请求回调。
//  用来保存一段代码,在恰当的时候拿出来调用。功能类似于函数。函数不能嵌套定义,block可以,
//  函数指针和block是一样的,相当于代码指针。#import <Foundation/Foundation.h>void printRose(int num)
{for (int i = 0; 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(10);void (*roseP)(int);roseP = printRose;roseP(3);void (^roseBlock1) (int);roseBlock1 = ^(int num){for (int i = 0; i < num; ++i) {printf("  {@} \n");printf("   |  \n");printf("  \\|/ \n");printf("   | \n");}};roseBlock1(2);int (*sumP)(int, int);sumP = sum;NSLog(@"sum = %i", sumP(10 , 20));int (^sumBlock) (int, int);sumBlock =^(int value1, int value2){return value1 + value2;};NSLog(@"sum = %i", sumBlock(10, 40));// block是一种数据类型int (^printBlock)(int)= ^int (int num){for (int i=0; i<num; ++i) {printf("--------\n");}return 1;};printBlock(2);int a = 10;int b;b = 20;return 0;
}

//
//  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(20, 10));int (*minusP)(int, int);minusP = minus;calculte minusP1 = minus;NSLog(@"minus = %i", minusP1(20, 10));int (^sumBlock)(int , int );calculteBlock sumBlock1 = ^(int value1, int value2){return value1 + value2;};NSLog(@"sum = %i", sumBlock1(20, 10));int (^minusBlock)(int , int);calculteBlock minusBlock1 = ^(int value1, int value2){return value1 - value2;};NSLog(@"minus = %i", minusBlock1(20, 10));return 0;
}

转载于:https://www.cnblogs.com/yaowen/p/7436372.html

oc61--block相关推荐

  1. HCIE-Cloud笔试

    前言: 目录按照HCIE-Cloud官方培训教材V2.0进行制定,通过笔试考点挂钩HCIE-Cloud官方培训教材V2.0中的知识,相互强化记忆 1.优点:基本笔试的知识分类,是按照该教材的目录大纲分 ...

  2. Python : IndentationError: expected an indented block

    如下图 运行包报错: IndentationError: expected an indented block 处理方法是 问题原因 1冒号后面要跟要写一些内容的, 2 其他位置,或多或少空格的位置不 ...

  3. ORA-19502: write error on file xxxxx, block number xxxx

    错误现象: 在ORACLE 10g下为表空间IGNITE_EGVSQL01增加数据文件时,报如下错误: SQL> ALTER TABLESPACE IGNITE_EGVSQL01      AD ...

  4. Ruby 之 Block, Proc, Lambda 联系--区别,转载

    Ruby 之 Block, Proc, Lambda Block Block 不是对象,是Ruby的语言特性,近似于闭包(Closure). 范例: def meth    res=  yield   ...

  5. oracle block media recovery,Oracle非归档模式Media Recovery错误之--ORA-26040

    11.转储对应的logfile 14:35:48 SYS@ prod>alter system dump logfile '/dsk1/oradata/prod/redo01a.log': Sy ...

  6. oc 协议 回调 静态成员_OC底层原理探究:Category、关联对象和block本质

    1.分类Category的使用 // 给MJPerson类添加分类 @interface MJPerson : NSObject - (void)run; @end@implementation MJ ...

  7. CUDA之单thread单block多thread单block多thread多block

    用简单的立方和归约来举例: //单thread单block #include <stdio.h> #include <stdlib.h> #include <cuda_r ...

  8. CUDA中grid、block、thread、warp与SM、SP的关系

    首先概括一下这几个概念.其中SM(Streaming Multiprocessor)和SP(streaming Processor)是硬件层次的,其中一个SM可以包含多个SP.thread是一个线程, ...

  9. iOS开发—block介绍

    - (void)viewDidLoad {[super viewDidLoad];NSLog(@"我在玩手机");NSLog(@"手机没电了");[self c ...

  10. Oracle Block浅析2:ITL(Interested Transaction List)

    一.ITL(Interested Transaction List): ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block ...

最新文章

  1. mysql查看数据文件ibdata_如何从 ibdata文件 恢复 MySQL 数据库
  2. Flex技术中的陷阱
  3. P1198 [JSOI2008]最大数
  4. 下一步工作,尽量将代码整理归拢成可以随意组合拆装的代码块。
  5. 12 月机器学习新书:《可解释机器学习方法的局限》,免费下载!
  6. a^logbx=x^logba
  7. Windows Server 2012 R2 安装完勒索病毒后出现的共享和DNS等问题
  8. 8bit黑白图像的灰度值范围是_浅谈工业CT图像灰度值
  9. SpringCloud创建Eureka模块
  10. linux 进程间通信 --- 消息队列 消息队列标识符 --- 同一类型 --- 消息头 --- 消息体
  11. c语言汉诺塔递归算法_Python进阶之递归函数的用法及其示例
  12. Arcgis Android 定位
  13. JUCE 中的音频编解码
  14. 《凡人修仙传》8.25正式上线链游玩家 | 修仙世界、天降神器
  15. Oracle SQL基础
  16. 那些在一个公司死磕了5-10年的人,最后都怎么样了?
  17. python 修改图片尺寸 留白_python等比压缩图片到固定大小,不足的留白
  18. 【无标题】问题记录—— (掌阅)
  19. 50部不可不看的时空/穿越电影
  20. 【git系列】重命名文件后为何就是untracked状态了 以及 应该如何正规地修改文件呢

热门文章

  1. 大学生转行IT,零基础非计算机专业可以学会吗?
  2. 干货丨常用JS前端开发框架有哪些?
  3. 共用体知识及 I - 共用体练习
  4. php中global什么意思,php中global和$GLOBALS[]的用法、解释、区别
  5. boss 计算机应用,Time Boss(电脑使用时间限制软件)官方版
  6. c++ gzip java.util.zip.gzip_java.util.zip.GZIPInputStream.close()方法示例
  7. 如果一栋楼起火谁赔偿_太原一辆快递车起火!赶紧看看有你的包裹没?
  8. 江津2021年高考成绩查询,刚刚,重庆市2020年高考分数线出炉!
  9. B.最大岛屿(dfs)
  10. 数字图像识别学习笔记(第二章-数字图像基础(1))