Blocks一些特性介绍
来源:互联网 发布:c语言的h文件 编辑:程序博客网 时间:2024/05/05 10:46
//Block特性介绍
#import<Foundation/Foundation.h>
//
//#include <iostream>
//#include <typeinfo>
//using namespace std;
//template <typename T>
//void BlockTest(T pBlock)
//{
// pBlock();
// cout << "The type is: " << typeid(T).name() << endl;
//}
//static void Hi(void)
//{
// NSLog(@"Hi, there!");
//}
//int main(int argc, const char* argv[])
//{
// BlockTest(Hi);
//}
int main(int argc,const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
// insert code here...
//dispatch_queue_t queue = dispatch_queue_create("com.example.LeiQueue", NULL);
//step1
//声明一个变量void(^iblocks)(void) 表示一个指向void(void)的函数块应用
void(^iblocks)(void) = ^(void){//^(void){ puts("Hello, world!"); };则表示一个函数块,它接受void类型参数,并且返回void
puts("Hello Lei");
return;
};
iblocks();
//step2 block 数组
void (^p[2])(void) = {
^(void){puts("Hello, world!"); },
^(void){puts("Goodbye!"); }
};
p[0](),
p[1]();//这里的p类型为void(^2)(void),表示含有2个void(^)void块引用元素变量
//Block语法递归函数实现
//一种方法是全局的或都static的block可以实现
void (^q)(int)= 0;//初始化变量
static void (^const blocks)(int) = ^(int i){
if(i > 0)
{ puts("Hello, world!");
blocks(i - 1);
}
};
q = blocks;
q(2);
//递归一种方法就是直接将block块也用__block来进行声明就可以了
__block void (^tblocks)(int);
tblocks = ^(int i){
if(i > 0){
puts("Hello, world!");
tblocks(i - 1);
}
};
tblocks(2);
//Blocks结合泛型的使用
//一般的外部函数能够作为模板参数
//C++标准中明确指出,模板参数必须为常量表达式,如果是函数的话必须是带有外部连接(即external-linkage)的函数指针。而Blocks表达式首先就不是一个常量表达式,然后它也没有外部连接。
//泛型的好处:最大的意义就是代码重用和类型安全了,不需要在运行时过多的强制类型转换,在编译时就知道类型。
//闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时候也称作自由变量)。
// block实际上就是Objective-C语言对于闭包的实现。 block配合上dispatch_queue,可以方便地实现简单的多线程编程和异步编程
//闭包:(假设两个临时变量数组,在block函数块里进行拷贝,原始数据不变)
//声明block的时候实际上是把当时的临时变量又复制了一份,在block里即使修改了这些复制的变量,也不影响外面的原始变量。即所谓的闭包
//当变量是一个指针的时候,block里只是复制了一份这个指针,两个指针指向同一个地址。所以,在block里面对指针指向内容做的修改,在block外面也一样生效
NSMutableArray *mArray = [NSMutableArrayarrayWithObjects:@"a",@"b",@"abc",nil];
NSMutableArray *mArrayCount = [NSMutableArrayarrayWithCapacity:1];
[mArrayenumerateObjectsWithOptions:NSEnumerationConcurrentusingBlock: ^(id obj,NSUInteger idx,BOOL *stop){
[mArrayCountaddObject:[NSNumbernumberWithInt:[obj length]]];
}];
NSLog(@"%@",mArrayCount);
//闭包的好处:用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中
}
return 0;
}
- Blocks一些特性介绍
- Realm的一些特性介绍
- 介绍Apple GNU C/C++,objective-C/C++中的新特性——Blocks
- HTML5 Draft 的一些新特性介绍
- Task 与 Activity 的一些特性介绍
- Code::Blocks 介绍
- Code::Blocks介绍
- IOS Blocks 详细介绍
- iphone 开发 XCode - Blocks 介绍
- iOS中Blocks的介绍
- 介绍一个blocks工具包BlocksKit
- iOS中Blocks的介绍
- 简单介绍一下jQuery的一些特性和用法:
- jdk7和8的一些新特性介绍
- jdk7和8的一些新特性介绍
- jdk7和8的一些新特性介绍
- jdk7和8的一些新特性介绍
- Android N上一些新特性的介绍
- android开发基本知识点
- 构造方法(初学者求教)
- 机房重构---准备阶段总结
- Knapsack-Dynamic Programming
- Context
- Blocks一些特性介绍
- OC 类中带参数的方法和匿名对象
- JAVA中||与|,&&与&的区别
- KVC 与 KVO 理解
- 让我们一起努力吧~
- android 动态加载jar/dex文件
- 这世界我曾经来过--童年
- c语言string源码
- 1. PHP 命名规则