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. Java设计模式——线程安全的单件模式

    单件模式,也称单例模式,用以创建独一无二的.只能有一个实例的对象. 单件模式的类图是所有模式的类图中最简单的--只有一个类.尽管从类设计的视角来看单件模式很简单,但是实现上还是会遇到一些问题,本文着重 ...

  2. jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法

    $.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...

  3. JavaScript基本数据类型和引用数据类型

    ECMAScript包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值那些可能有多个值构成的对象. 在进行变量赋值时,解析器必须确定这个值是基本类型值还是引用 ...

  4. dSYM 文件分析工具

    来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 bug,因为项目中使用了友盟统计,所以在友盟给出的错误信息统计中能比较方便的找出客户端异 ...

  5. MVP解析

    一套可以直接复制使用的MVP框架 通过对MVP设计模式学习,对MVP也有了一个初步的认识,以登录Login模块为例,封装MVP如下: package com.example.administrator ...

  6. ASP.NET MVC 让@Html.DropDownList显示默认值

    在使用@Html.DropDownList的过程中,发现它的用法很局限,比如在加载的时候显示设定的默认项或者调整它的显示样式,在网上查了一些资料,终于把这个问题解决了. 一.View代码 @using ...

  7. 一道关于java序列化的问题,看大家知多少————

    问题先放在这里,稍后我会做出解答 已知类有Test和Test2,问两次主程序的输出结果是多少(SerializeUtil只是序列化的工具类) 类Test public class Test imple ...

  8. 尝试解析js面试题(一)【转发】

    解析: 1.Foo.getName(); //2 1)结果执行的是Foo对象的一个叫做getName()的属性,而1.4.5中的getName都是作为函数存在,所以可以排除1.4.5 2)剩下两个中, ...

  9. 办公OA的登陆界面..

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  10. RabbitMq 集群搭建

        实验环境: 操作系统为 Centos 7.2 IP hostName 192.168.190.132 node132 192.168.190.139 node139 192.168.190.1 ...