Block in iOS (2)
来源:互联网 发布:linux视频播放器安装 编辑:程序博客网 时间:2024/05/22 07:43
上次介绍了block的基本概念,以及在iOS开发中我们一般怎么使用它,那这次重点介绍block和变量之间的使用规范,根据苹果在Apple document中的描述,block中的变量一般的使用得注意一下几个方面:
1、全局的变量是可以在block中访问的,包括静态变量;
2、block自带的参数可以访问,这个就跟函数使用它自己的参数是一样的;
3、栈变量在block中的使用按照常量对待;
下面的是一个例子:
int x = 123;
void (^printXAndY)(int) = ^(int y) {
printf("%d %d\n", x, y);
};
printXAndY(456); // prints: 123 456
另外的一个错误使用的例子如下:
int x = 123;
void (^printXAndY)(int) = ^(int y) {
x = x + y; // Error with "Variable is not assignable
x ++;
y = x ++;
printf("%d %d\n", x, y);
};
4、以_block定义的局部变量在block中允许被修改,这种情况下,它的使用和函数中的变量一样。
_block int x = 123; //x lives in block storage
void (^printXAndY)(int) = ^(int y) {
x = x + y;
printf("%d %d\n", x, y);
};
printXAndY(456); // prints: 579 456
// x is now 579
5、对于全局变量,常量不允许在block中进行修改,否则会跑出来一个错误“Read-only variable is not assignable“,但是对于类似int GlobleInt1 = 1的全局变量声明,它是可以在block中进行更改的,比如下面的代码:
void (^addX)(int) = ^(int x) {
GlobleInt1 = x ;
NSLog(@"GlobalInt = %d", GlobleInt1);//Output: GlobalInt = 100
GlobleInt1 ++;
};
NSLog(@"GlobalInt = %d", GlobleInt1);//Output: GlobalInt = 1
addX(100);
NSLog(@"GlobalInt = %d", GlobleInt1);//Output: GlobalInt = 101
int value = 10;
int(^add)(int) = ^(int valueOne)
{
return value + valueOne;
};
value = 20;
NSLog(@"Result: %d", add(3));
int value = 10;
value = 15;
value = 33;
int(^add)(int) = ^(int valueOne)
{
return value + valueOne;
};
value = 20;
NSLog(@"Result: %d", add(3));
__block int value = 10;
value = 15;
value = 33;
int(^add)(int) = ^(int valueOne)
{
return value + valueOne;
};
value = 20;
NSLog(@"Result: %d", add(3));
Block的生命周期和函数的类似,一开始Block都是放在stack里面的,换句话说就是它的生命周期随着method或function结束就会被回收。
- Block in iOS (2)
- Block in iOS (1)
- iOS Block详解2
- IOS block编程指南 2 block开始
- iOS中Block(2)
- iOS(2)Block的使用
- iOS block 源码详解2
- IOS 代码块block :capturing self strongly in this block is 告警
- ios block
- IOS BLOCK
- ios block
- ios block
- ios block
- IOS BLOCK
- ios block
- iOS Block
- ios block
- IOS block
- Trie树详解及其应用
- iOS 推送通知详解
- 判断scrollView的滑动方向
- C++:暴力搜索全排列解决背包问题
- mongo索引小结
- Block in iOS (2)
- Android 获取assets的绝对路径
- linuix yum 命令安装Apache(httpd)
- Android的Message机制(简单小结)
- 一、在普通项目中增加定时调度引擎Quartz
- UVA714 Copying Books (最大值最小化)
- jsp自定义分页标签
- linguist 乱码问题 : Qt国际化(源码含中文时)的点滴分析
- WeixinJSBridge