OC学习4——OC新特性之块(Block)
文章主要参考 关于OC中的block自己的一些理解(一)
对块的深入理解 浅析ios开发中Block块语法的妙用
1、关于block
block的作用:保存一段代码。
苹果官方推荐的一种语法,类似于C语言的函数,但是比函数更加灵活。
^是block语法的标识。
2、在Object-C中,块被当做一个对象来处理,这个对象可以:
有自己的局部变量
可以传入参数
有返回值
可以访问自己定义时的上下文变量
可以修改自己定义时特定的上下文变量
作为参数传递给其它函数
3、block的基本语法

4、block的使用
- 无返回值无参数
- (void)myFirstBlock
{
//1.定义block
void (^myblock)() = ^{ NSLog(@"无参数无返回值"); }; //2.调用block
myblock();
} //输出结果:2016-02-18 09:56:50.124 01-block[750:25107] 无参数无返回值 有参数没有返回值
- (void)mySecondBlock
{
//1.定义block
void (^mySecondBlock)(int,int) = ^ (int num1,int num2){
NSLog(@"有参数无返回值:%d",num1 + num2);
}; //2.调用block
mySecondBlock(,);
} //输出结果:2016-02-18 10:03:22.221 01-block[811:30160] 有参数无返回值:5- 有参数有返回值
- (void)myThirdBlock
{
//1.定义block
double (^myThirdBlock)(double,double) = ^ (double r1,double r2){
return r1 + r2;
}; //2.调用block
double r3 = myThirdBlock(1.1,2.2);
NSLog(@"有参数有返回值:%f",r3);
} //输出结果:2016-02-18 10:06:42.615 01-block[861:32505] 有参数有返回值:3.300000
5、block的注意点
- Block内部可以访问外部变量
- 默认情况下,Block内部不能修改外部的局部变量
- 给局部变量加上 _block 关键字,则这个局部变量可以在block内部进行修改
- (void)myFourBlock
{
//int num = 5;
__block int num = ;
void (^myFourBlock)() = ^{ num = ;
NSLog(@"%d",num);
};
myFourBlock();
}上述代码中如果num的定义才用第3行的方式,则在运行第六行时会报错:missing __block type specifier; ,才用第4行的定义则可以正确输出:2016-02-18 10:25:02.195 01-block[1016:45943] 6
6、整体应用代码
#import <Foundation/Foundation.h> typedef int (^MyBlock)(int,int); // block类型 int cc = ;
int main(int argc, const char * argv[]) { int a = ;
__block int b = ;
void (^voidBlock)() = ^{
NSLog(@"------------");
//在bloc体内不能修改非__block声明的局部变量,可以修改全局变量和用__block声明的局部变量
//a = 10;
b = ;
cc = ;
};
NSLog(@"%d %d %d",a,b,cc);
voidBlock();
NSLog(@"%d %d %d",a,b,cc); int (^sumBloc)(int , int);
sumBloc= ^(int a,int b){ return a+b;
};
int (^subBloc)(int,int) = ^(int a,int b){
return a - b ;
}; int sum = sumBloc(,);
int sub = subBloc(,); NSLog(@"sum = %d sub = %d",sum,sub); voidBlock(); //------ typedef block类型用法------------ MyBlock sum1 = ^(int a,int b){
return a + b ;
}; MyBlock sub1 ;
sub1 = ^(int a ,int b){
return a - b ;
}; NSLog(@"sum1 = %d sub1 = %d",sum1(,),sub1(,)); return ;
}
OC学习4——OC新特性之块(Block)的更多相关文章
- 可能是最早的学习Android N新特性的文章
可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android ...
- 从零开始一起学习SLAM | C++新特性要不要学?
LAM,C++编程是必备技能.不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套. 本文所谓的C++新特性是指C++11及其以后的C++14.C++17增加的新关键字和新语法特性.其 ...
- iOS开发——新特性OC篇&IOS9 SDK新特性
iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...
- iOS开发——新特性OC篇&IOS9 系统新特性
IOS9 系统新特性 2015年6月89号凌晨召开的WWDC 2015苹果开发者大会发布了全新的iOS 9系统,PC6小编今天给大家整理了这次iOS9的系统更新带来了哪些新的功能与升级,本次新功能一览 ...
- Java学习之==>Java8 新特性详解
一.简介 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.Java 8是 Java 自 Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库. ...
- 前端学习笔记 --ES6新特性
前言 这篇博客是我在b站进行学习es6课程时的笔记总结与补充. 此处贴出up主的教程视频地址:深入解读ES6系列(全18讲) 1.ES6学习之路 1.1 ES6新特性 1. 变量 2. 函数 3. 数 ...
- WEB学习笔记14-HTML5新特性的使用
(1)定义文档类型声明 <!DOCTYPE html> (2)定义页面编码 <!—HTML 4.01中定义的设置页面编码的方式--> <meta http-equiv=& ...
- Java13新特性 -- 文本块
在JDK 12中引入了Raw String Literals特性,但在发布之前就放弃了.这个JEP与引入多行字符串文字(text block) 在意义上是类似的. 这条新特性跟 Kotlin 里的文本 ...
- 在C++98基础上学习C++11新特性
自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过 ...
- ios学习路线—Objective-C(新特性)
1.方法顺序无关 Objective-C类由声明文件h和实现文件m组成,所有的public方法都在h文件中声明,private方法可以写在m文件中,但是在早期的编译环境中需要注意方法的顺序,例如下面的 ...
随机推荐
- C#发送QQ邮件
1.首先配置一下发件人的账号密码(密码根据自己所选择的的邮箱填写,此处不做展示) <?xml version="1.0" encoding="utf-8" ...
- php json 写入 mysql 的例子
$a['aaa']='aaaa'; $a['bbb']='bbb'; $a['ccc']='ccc'; $arr['step_name']='kfkf'; $arr['process_name']=' ...
- Ubuntu修改时间时区
设定时区:dpkg-reconfigure tzdata 选择Asia,Hong Kong. sudo apt-get install ntpdate // 安装时间同步工具 sudo ntpdate ...
- c#: 简单的日志管理类(TextWriterTraceListener)
以c#实现轻量级的日志管理,着实简单,置一静态类记之: /// <summary> /// 日志管理 /// </summary> public static class Lo ...
- 可视化-echarts流向图制作
案例: http://www.internetke.com/jsEffects/2018040406/ 前段时间用echarts做了流程图,在此记录下制作步骤. 一.Echarts是什么 Echart ...
- MySQL开发——【字符集、校对集】
字符集 查看MySQL中的字符集 基本语法: show character set; 查看MySQL中的默认字符集 基本语法: show variables like ‘character_set%’ ...
- kylin 系列(一)安装部署
kylin 系列(一)安装部署 一.环境说明 1.1 版本选择 cdh 版本下载地址:http://archive.cloudera.com/cdh5/cdh/5/ 软件名称 版本 JDK 1.8 H ...
- trinitycore 魔兽服务器源码分析(一) 网络
trinitycore是游戏服务器的开源代码 许多玩家使用魔兽的数据来进行测试 ,使用它来假设魔兽私服. 官方网址 https://www.trinitycore.org/ 类似的还有mangos ...
- 第一次spring会议
1.今天查询了很多案例,找到了符合我们要求的案例,并进行了尝试. 2.昨天拍摄了宣传视频. 3.明天准备用C#限定格式输出TXT文件.
- Apache ab性能测试结果分析
Apache ab性能测试结果分析 测试场景:模拟10个用户,对某页发起总共100次请求. 测试命令: ab -n 100 -c 10 地址 测试报告: Server Software: 被测服务器软 ...