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. WCF实现事件通知相关应用技巧介绍

    WCF实现事件通知是一个比较容易掌握的知识点,不过在实现的过程中,我们还是需要注意一些事项,以保证功能的完善性. WCF中有一些方法的应用对于初学者来说还是比较容易应用.只要熟练的联系这些方法操作,一 ...

  2. 使用MyBatis Generator自动创建代码(dao,mapping,poji)

    连接的数据库为SQL server2008,所以需要的文件为sqljdbc4.jar 使用的lib库有: 在lib库目录下新建一个src文件夹用来存放生成的文件,然后新建generatorConfig ...

  3. oracle rman catalog备份和恢复

    1.丢失控制文件      启动数据库至nomount状态:restore controlfile from autobackup/restore controlfile from '+data/ba ...

  4. jQuery动画与特效详解

    本文主要是讲解和学习jQuery的自动显隐,渐入渐出等. 1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,本节简单介绍jQuery的显示和隐藏. 代码如下: &l ...

  5. xcode8 storyboard 控件显示错位

    升级xcode8 后选择device 为6s 出现上面的情况,控件显示异常.使用Update Frame 显示正常.不能选择Update Constraints   如果误选 commend + Z ...

  6. iOS陀螺仪 参数意义

    self.mManager = [[CMMotionManager alloc]init]; self.mManager.deviceMotionUpdateInterval = 0.5; if (s ...

  7. MS SQL巡检系列——检查外键字段是否缺少索引

    前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...

  8. 使用InstallAnywhere工具打包Java_Web程序

      一.准备工作 1.    下载InstallAnywhere,并安装: 2.    下载解压版jdk1.7(示例为jdk1.7.0_75): 3.    下载解压版tomcat7.0以上版本(示例 ...

  9. Keepalived+LVS+nginx双机热备

    Keepalived简介 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生. Keepalived采 ...

  10. Warm myself by my hand

    周末的尾巴了. 前几天白日里的气温降到10摄氏度以下,穿上了秋裤.隔天跑一次步,晚上九点多,5公里,25分钟左右.换上薄薄的运动裤,两件运动衣.一出宿舍门就没觉得冷,跑着跑着就愈加热了起来.遇到的问题 ...