1.原理

1.1block类型

a.全局bock块   贯彻整个程序

b.栈块  存在于栈内存中,作用域中使用

c.堆块  自行管理其内存

注*:http://blog.parse.com/learn/engineering/objective-c-blocks-quiz/   检验自己了解情况

1.2定义

类函数,闭包

注*:1.block捕获块中出现的外部变量

2.栈块copy之后会形成堆块

3.__weak(ARC)或__block(MRC)来避免循环引用

4.若想深入了解可使用C++理解(clang -rewrite-objc 源代码文件名)

2.使用

函数和block对比进行

1.调用

- (void)blockImp{

    //只有调用Block时候,才会执行其{}体内的代码
[self block1];
} - (void)block1{
void (^mm)(int) = ^(int index){
NSLog(@"block1 index = %d",index);
};
if (mm) {
mm();
}
}
- (void)functionUser{
function1("Mr huang"); //简单函数调用
}
void function1(char * name){
printf("Hello %s\n",name);
}

2.形参

- (void)blockImp{

    [self block2:^(int index) {
NSLog(@"block2 index = %d",index);
}]; //函数定义不能在 方法内部,而block可以。
[self block2:printNumBlock];
} - (void)block2:(void(^)(int))block{
if (block) {
block();
}
} void(^printNumBlock)(int) = ^(int num){
NSLog(@"int number is %d",num);
};
int sayHello(int m){
printf("sayHello %d\n",m);
return m + ;
} - (void)functionUser{
function2(sayHello); //函数作为参数掉用
}

3.返回值

- (void)blockImp{
[self block3]();
} - (void(^)(int))block3{
return ^(int index){
NSLog(@"block3 index = %d",index);
};
}
int add(int a , int b){
return a + b;
} int sub(int a , int b){
return a - b;
} void * function3(int i){
if (i == ) {
return add;
}else{
return sub;
}
} - (void)functionUser{
int (*m)(int, int) = function3(); //函数作为参数
int ok = m(,);
printf("ok %d\n",ok);
}

3.链式编程

3.1.第三方链式 (Masory)

3.2.自定义

#import <Foundation/Foundation.h>

@interface GLPerson : NSObject

 @property(nonatomic , assign)NSInteger age;

@property(nonatomic , copy)NSString * name;

- (GLPerson *((^)(NSString *)))setName;

- (GLPerson *((^)(NSInteger)))setAge;

@end
#import "GLPerson.h"

@implementation GLPerson

-(NSString *)description{
return [NSString stringWithFormat:@"name = '%@';age = %ld",_name,_age];
} - (GLPerson *((^)(NSString *)))setName{
return ^(NSString * name){
self.name = name;
return self;
};
} - (GLPerson *((^)(NSInteger)))setAge{
return ^(NSInteger age){
self.age = age;
return self;
};
} @end
    GLPerson *person = [[GLPerson alloc] init];
person.setAge().setName(@"gulong");
NSLog(@"%@",person);

Block 代码快的更多相关文章

  1. iOS-动画效果(首尾式动画,代码快动画,核心动画,序列帧动画)

    一.各个动画的优缺点 1.首尾动画:如果只是修改空间的属性,使用首尾动画比较方便,如果在动画结束后做后续处理,就不是那么方面了. 2.核心动画:有点在于对后续的处理方便. 3.块动画: (1)在实际的 ...

  2. iOS开发关于Block代码错误

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4052362.html ,转载请注明出处. iOS开发关于Block代码错误 Incompatible bloc ...

  3. block(代码块)的介绍以及使用方法和变量之间的关系

    http://blog.csdn.net/menxu_work/article/details/8762848 block(代码块)的介绍以及使用方法和变量之间的关系 block(代码块)的介绍以及使 ...

  4. Java类加载信息的顺序:包括静态代码快、静态类变量、非静态代码快、构造方法、普通方法

    JVM运行之前会执行一个叫做类加载器的子系统,叫做ClassLoader,那么类里面那么多“元素”,究竟是个什么顺序呢,写几行代码测试一下,通过给每个方法和代码快和静态变量打上断点来测试: class ...

  5. iOS - OC Block 代码块

    前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...

  6. iOS - Block 代码块

    1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...

  7. block代码块介绍

    关于block的简单介绍 什么是block? Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象:它也很像C++中的 ...

  8. IOS学习4——block代码块

    本文转载自:iOS开发-由浅至深学习block 一.关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想 ...

  9. IOS Block代码块的定义与使用

    代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值.     脱字符是代码块的语法标记.下图表示代码块的 ...

随机推荐

  1. React Native知识11-Props(属性)与State(状态)

    一:Props(属性) 大多数组件在创建时就可以使用各种参数来进行定制.用于定制的这些参数就称为props(属性).props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变 通过 ...

  2. iOS网络3—UIWebView与WKWebView使用详解

    一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...

  3. 转:IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字

    IE兼容模式下 SCRIPT1028: 缺少标识符.字符串或数字例如下面一段代码 var a = {    x: 1,    y: 2,};alert(a.x);如果在IE的兼容性视图(IE7文档模式 ...

  4. SQL Server 2014新特性:分区索引重建

    <single_partition_rebuild_index_option> ::= {     SORT_IN_TEMPDB = { ON | OFF }   | MAXDOP = m ...

  5. OutPut子句的使用限制

    Output子句很方便,多数情况下可以省略了更新后插入或者删除后插入操作表,将2个语句变成1个语句操作.不管从语句美观还是效率上都是有不错的提升, 但是对于Output自身,也是有一些限制的. 从文档 ...

  6. .htaccess添加Header set Cache-Control报错500

    在优化网站开启站点的图片缓存时,需要在.htaccess文件中加入: #文件缓存时间配置10分钟 <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf ...

  7. ubuntu系统安装初始化脚本

    ubuntu系统安装初始化脚本 经常安装卸载ubuntu,每次系统安装完成后要安装好多软件,一个个命令输很麻烦浪费时间,一个sh文件全搞定! 1. flashplayer下载:点击这里 2. Auda ...

  8. 在使用EF时调用DBFUNCTION扩展方法时,发生ENTITYCOMMANDEXECUTIONEXCEPTION 异常的解决办法

    System.Data.Entity.Core.EntityCommandExecutionException : An error occurred while executing the comm ...

  9. NRF24L01 无线模块的使用

    NRF24L01 是一款工作在2.4-2.5GHz通用ISM频段的单片收发芯片 工作电压:1.9-3.6V低电压工作 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象 多频点 ...

  10. 前端少侠的ps故事

    前端少侠的ps故事 正所谓,码在江湖,身不由己.自21世纪前后端分离,代码分工细化以来,前端与设计的合作也变得越来越重要.有人说,如果前端懂设计的话,工作会更快一点.倘若说我入前端半年能算半个前端少侠 ...