Block 代码快
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 代码快的更多相关文章
- iOS-动画效果(首尾式动画,代码快动画,核心动画,序列帧动画)
一.各个动画的优缺点 1.首尾动画:如果只是修改空间的属性,使用首尾动画比较方便,如果在动画结束后做后续处理,就不是那么方面了. 2.核心动画:有点在于对后续的处理方便. 3.块动画: (1)在实际的 ...
- iOS开发关于Block代码错误
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4052362.html ,转载请注明出处. iOS开发关于Block代码错误 Incompatible bloc ...
- block(代码块)的介绍以及使用方法和变量之间的关系
http://blog.csdn.net/menxu_work/article/details/8762848 block(代码块)的介绍以及使用方法和变量之间的关系 block(代码块)的介绍以及使 ...
- Java类加载信息的顺序:包括静态代码快、静态类变量、非静态代码快、构造方法、普通方法
JVM运行之前会执行一个叫做类加载器的子系统,叫做ClassLoader,那么类里面那么多“元素”,究竟是个什么顺序呢,写几行代码测试一下,通过给每个方法和代码快和静态变量打上断点来测试: class ...
- iOS - OC Block 代码块
前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...
- iOS - Block 代码块
1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...
- block代码块介绍
关于block的简单介绍 什么是block? Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象:它也很像C++中的 ...
- IOS学习4——block代码块
本文转载自:iOS开发-由浅至深学习block 一.关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想 ...
- IOS Block代码块的定义与使用
代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值. 脱字符是代码块的语法标记.下图表示代码块的 ...
随机推荐
- 如何为eclipse安装合适版本的python插件pydev
pydev是一款优秀的Eclipse插件,大多数喜欢在eclipse开发软件的程序员(也许是java程序员)在开发python软件时希望继续使用eclipse,那么pydev是非常理想的选择. 1.安 ...
- jQuery.ajax(url,[settings])
概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpRequest 对象. ...
- xmlHttp.readyState的五种状态
自己简单的总结一下 深入的了解可以看其他道友的 O(∩_∩)O readyState有五种可能的值: 0 (未初始化): (XMLHttpRequest)对象已经创建,但还没有调用open()方法. ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Kali v2.1.2 for Raspberry Pi 3B
最新的下载地址是: https://www.offensive-security.com/kali-linux-arm-images/ 按照官网的说法是找不到树莓派版本的SHA1SUM和SHA1SUM ...
- 消费RabbitMQ时的注意事项,如何禁止大量的消息涌到Consumer
按照官网提供的订阅型写法( Retrieving Messages By Subscription ("push API")) 我发现,RabbitMQ服务器会在短时间内发送大量的 ...
- reborn to freelancer
I want to be a freelancer, so I come back to record all my efforts. I hope this will be a new start ...
- Group by
分组语句必须和聚合函数在一起使用, group by子句负责将数据分成逻辑组,聚合函数对每一组进行统计计算 group by 必须放到 select 语句后面,如果select语句中有where子句, ...
- Linux下面安装rpm包
[root@localhost ~]# mount /dev/sdb4 /mnt/ [root@localhost ~]# cd /mnt[root@localhost mnt]# lsaddons ...
- After the exam
离散数学考完啦!!!自我感觉还行,或许得不到高分,但是过的话是没问题了.(但愿成绩出来后不打脸) 持续了两周的复习,告一段落了.那么,今天就休息休息吧. 今天阴有雨,走过的地儿都是湿漉漉.滑溜溜的.这 ...