iOS 阶段学习第24天笔记(Block的介绍)
iOS学习(OC语言)知识点整理
一、Block 的介绍
1)概念:
block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用
封装一段代码 可以在任何地方调用 block 也可以作为函数参数,以及函数返回值
2)Block 实例代码
//定义了一个block类型MyBlock,MyBlock类型的变量只能指向带两个int的参数和返回int的代码块
typedef int (^MyBlock)(int,int);
//定义一个函数指针
int (*pMath)(int ,int); int add(int a,int b)
{
return a+b;
} int sub(int a,int b)
{
return a-b;
} int main(int argc, const char * argv[]) {
@autoreleasepool {
pMath = add;//指向函数指针
//NSLog(@"sum: %d",pMath(2,3));
pMath = sub; //定义了一个block,block只能指向带2个int的参数,返回int的代码块
//以^开始的为代码块,后面()是参数,然后{}代码块
int (^bloke1)(int,int) = ^(int a,int b){
return a+b;
}; int s = bloke1(,);
NSLog(@"s:%d",s);
//定义一个block指向没有参数没有返回值的代码块(没有参数,void可以省略)
void (^block2)(void) = ^{
NSLog(@"programing is fun!");
};
block2();
int (^block3)(int,int) = ^(int a,int b ){
return a-b; }; //定义了MyBlock类型的变量,赋值代码块
MyBlock block4 = ^(int a,int b){
return a*b;
}; NSLog(@"%d",block4(,)); int c = ;
__block int d = ;
//block块可以访问块外的变量但是不能修改,如果需要修改,变量前加上__block修饰
void (^block5)(void) = ^{
d = d+;
NSLog(@"c:%d,d:%d",c,d);
};
block5();
}
return ;
}
3)解决Block互为强引用时的警告的方法 例如:
UIImageView *imgv = [[UIImageView alloc]initWithFrame:CGRectMake(, , , )];
[self.view addSubview:imgv]; //使用 __unsafe_unretained 重新定义对象 解决互为强引用的问题
__unsafe_unretained UIImageView *weakImagev = imgv;
[imgv setImageWithURL:[NSURL URLWithString:@"http://xxx/xxx.jpg?570x300_120"] withPlaceHolder:nil
competion:^(UIImage *image) {
weakImagev.image = image;
}];
4)有返回值的Block的使用方法 实例代码:
//将局部变量声明为__block,表示将会由block进行操作,比如:
__block float price = 1.99;
float (^finalPrice)(int) = ^(int quantity)
{
return quantity * price;
}; int orderQuantity = ;
price =0.99; NSLog(@"With block storage modifier - Ordering %d units, final price is: $%2.2f", orderQuantity, finalPrice(orderQuantity)); //此时输出为With block storage modifier – Ordering 10 units, final price is: $9.90
iOS 阶段学习第24天笔记(Block的介绍)的更多相关文章
- iOS阶段学习第29天笔记(UITextField的介绍)
iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField 初始化实例代码: //创建一个UIt ...
- iOS阶段学习第28天笔记(UIView的介绍)
iOS学习(UI)知识点整理 一.关于UIVIew 的介绍 1)概念:UIView 是用于装载并展示各类控件的大容器,是iOS中所有UI控件的基类 2)UIView 初始化实例代码 UIView * ...
- iOS阶段学习第27天笔记(UIButton-UIImageView的介绍)
iOS学习(UI)知识点整理 一.关于UIButton的介绍 1)概念:UIButton 是一种常用的控件,通过点击触发相应的功能 2)UIButton 的几种常用的状态 1.UICon ...
- iOS阶段学习第35天笔记(Touch手势介绍)
一.Touch手势 1.利用手势实现UIButton移动效果 实例代码 1) 创建一个继承自UIButton的类 MyButton.h 代码实现 #import <UIKit/UIKit.h ...
- iOS阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS 阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS阶段学习第32天笔记(页面传值方法介绍)
iOS学习(UI)知识点整理 一.界面传值方法 1.方法一 Block传值 通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewContro ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- iOS 阶段学习第七天笔记(函数、递归)
iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2 ...
随机推荐
- 打包上传成功, itunes connect 不出现上传的版本
由于有一次感觉build setting 里 code signing identity设置证书有点乱,有些已经用不到了,就想把那些删除 于是我找到了所有证书的那个文件夹(进入所有证书的那个文件夹), ...
- 1编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。2编写一个Java项目,定义包,在包下定义包含main方法的类。
- 敏捷数据科学:用Hadoop创建数据分析应用
敏捷数据科学:用Hadoop创建数据分析应用(数据分析最佳实践入门敏捷大数据首作分步骤|全流程演示思路.工具与方法) [美]Russell Jurney(拉塞尔·朱尔尼) 著 冯文中 朱洪波 译 ...
- FIR.im Weekly - 这是多产的一周
前方干货颇多,请备好小板凳,泡好茶,慢慢看. 上周四到周六(23号-25号),由 infoQ 主办的 QCon 在北京召开,各技术大牛围绕敏捷开发.技术架构.开发实践等话题进行了技术分享与探讨. QC ...
- 使用XSD校验Mybatis的SqlMapper配置文件(1)
这篇文章以前面对SqlSessionFactoryBean的重构为基础,先简单回顾一下做了哪些操作: 新建SqlSessionFactoryBean,初始代码和mybatis-spring相同: 重构 ...
- Zend Studio导入ThinkPHP工程
1.一般来说,thinkPHP文件工程(简称php工程)要部署到www下面,那么可以先复制一份php工程到非www文件夹的地方(如桌面): 2.打开zend studio右键,File-New-Loc ...
- CentOS6.5使用createrepo搭建本地源
本地搭建本地yum源采用的rpm全部来自CentOS-6.5-bin-DVD1&DVD2; 我的是在虚拟机环境安装,先检查我的操作系统版本: 1 2 3 4 [adam@ultraera ~] ...
- Oracle闪回技术(Flashback)
闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来“观察”过去:闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口: ...
- MongoDB的学习--索引
索引可以用来优化查询,而且在某些特定类型的查询中,索引是必不可少的.为集合选择合适的索引是提高性能的关键. 先来mock数据 for (i = 0; i < 1000000; i++) { db ...
- Unity3D UNet网络组件详解
UNet常见概念简介 Spawn:简单来说,把服务器上的GameObject,根据上面的NetworkIdentity组件找到对应监视连接,在监视连接里生成相应的GameObject. Command ...