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的介绍)的更多相关文章

  1. iOS阶段学习第29天笔记(UITextField的介绍)

    iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField  初始化实例代码: //创建一个UIt ...

  2. iOS阶段学习第28天笔记(UIView的介绍)

    iOS学习(UI)知识点整理 一.关于UIVIew 的介绍 1)概念:UIView 是用于装载并展示各类控件的大容器,是iOS中所有UI控件的基类 2)UIView  初始化实例代码 UIView * ...

  3. iOS阶段学习第27天笔记(UIButton-UIImageView的介绍)

    iOS学习(UI)知识点整理 一.关于UIButton的介绍 1)概念:UIButton 是一种常用的控件,通过点击触发相应的功能 2)UIButton 的几种常用的状态        1.UICon ...

  4. iOS阶段学习第35天笔记(Touch手势介绍)

    一.Touch手势 1.利用手势实现UIButton移动效果  实例代码 1) 创建一个继承自UIButton的类 MyButton.h  代码实现 #import <UIKit/UIKit.h ...

  5. iOS阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  6. iOS 阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  7. iOS阶段学习第32天笔记(页面传值方法介绍)

    iOS学习(UI)知识点整理 一.界面传值方法 1.方法一  Block传值  通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewContro ...

  8. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  9. iOS 阶段学习第七天笔记(函数、递归)

     iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1  形参名1,形参类型2   形参名2 ...

随机推荐

  1. common-dbcp2数据库连接池参数说明

    参数 默认值 描述 建议值 DefaultAutoCommit  null 通过这个池创建连接的默认自动提交状态.如果不设置,则setAutoCommit 方法将不被调用.  true Default ...

  2. mysql C API的使用

    <MySQL++简介>介绍了如何使用C++来访问mysql,本文记录下使用C API访问mysql,mysql++就是对本文介绍的C-API的封装. 常用函数(名字就能告诉我们用法): M ...

  3. Atitit vod ver 12 new feature v12 pb2 影吧 视频 电影 点播 播放系统v12新特性

    Atitit vod ver 12 new feature v12 pb2 影吧 视频 电影 点播 播放系统v12新特性 项目分离从独立的se ver Run mode from brow ex to ...

  4. iOS-------应用性能调优的25个建议和技巧

    性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的 ...

  5. 每天一个linux命令(42):kill命令

    Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须 ...

  6. angularjs的$filter使用

    angularjs的$filter使用 $filter服务可以在js中对数据进行过滤处理,ng有几个内建的filter,其中有一个叫filter的filter,可方便的实现属性的过滤. 详细的API参 ...

  7. 【译】怎样编写移动优先的CSS

    原文:How To Write Mobile-first CSS 作者: 译者:huansky 构建响应式网站是今天前端开发人员必备的技能. 当我们谈论响应式网站时,移动优先这个词立刻就会浮现. 我们 ...

  8. 优化与扩展Mybatis的SqlMapper解析

    接上一篇博文,这一篇来讲述怎么实现SchemaSqlMapperParserDelegate——解析SqlMapper配置文件. 要想实现SqlMapper文件的解析,还需要仔细分析一下mybatis ...

  9. Netty学习一:基本知识

    1. Netty基础知识 1.1 Netty出现的原因 Java NIO 太难用,存在BUG(如Epoll-Bug) 基于第一点,大多数高性能服务器被C和C++盘踞 同样基于第一点,Java NIO编 ...

  10. SDWebImage清除图片缓存

    背景: 使用 SDWebImage 库,由于内存中一直缓存着加载的图片,而导致内存过高(我们无法手动管理内存),弹出内存警告而导致程序很卡或者直接crash掉. 我的解决方法: 在AppDelegat ...