[iOS] Obnjective-C 中的 __block 是什么意思
2014-10-10 15:47
288 查看
__block 的标记告诉编译器,这个变量在 block 里面需要做特殊处理。
一般来说,在 block 中用的变量值是被复制过来的,所以对于变量本身的修改并不会影响这个变量的真实值。而当我们用 __block 标记的时候,表示在 block 中的修改对于 block 外也是有效地。
具体可参见 https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html ,这是苹果官方对于
block 的解释。
接下来我们看一个例子:
[objc] view
plaincopy
extern NSInteger CounterGlobal;
static NSInteger CounterStatic;
{
NSInteger localCounter = 42;
__block char localCharacter;
void (^aBlock)(void) = ^(void) {
++CounterGlobal;
++CounterStatic;
CounterGlobal = localCounter; // localCounter fixed at block creation
localCharacter = 'a'; // sets localCharacter in enclosing scope
};
++localCounter; // unseen by the block
localCharacter = 'b';
aBlock(); // execute the block
// localCharacter now 'a'
}
在上面的代码里,localConter 和 localCharacter 都在 block 中有所修改,但是在 block 里面,只有 localCharacter 的修改是有效的,原因是 __block 标记起了作用。而在 block 中对于 localCharacter 的修改在 block 外也是可见的。
一般来说,在 block 中用的变量值是被复制过来的,所以对于变量本身的修改并不会影响这个变量的真实值。而当我们用 __block 标记的时候,表示在 block 中的修改对于 block 外也是有效地。
具体可参见 https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html ,这是苹果官方对于
block 的解释。
接下来我们看一个例子:
[objc] view
plaincopy
extern NSInteger CounterGlobal;
static NSInteger CounterStatic;
{
NSInteger localCounter = 42;
__block char localCharacter;
void (^aBlock)(void) = ^(void) {
++CounterGlobal;
++CounterStatic;
CounterGlobal = localCounter; // localCounter fixed at block creation
localCharacter = 'a'; // sets localCharacter in enclosing scope
};
++localCounter; // unseen by the block
localCharacter = 'b';
aBlock(); // execute the block
// localCharacter now 'a'
}
在上面的代码里,localConter 和 localCharacter 都在 block 中有所修改,但是在 block 里面,只有 localCharacter 的修改是有效的,原因是 __block 标记起了作用。而在 block 中对于 localCharacter 的修改在 block 外也是可见的。
相关文章推荐
- [iOS] Obnjective-C 中的 __block 是什么意思
- ios 开发中 UIID是什么意思?
- ios面试问题——oc是动态运行时语言是什么意思
- inline-block是什么意思
- ios 中armv7,armv7s,arm64,i386,x86_64是什么意思
- IOS Q&A __weak typeof(self) weakSelf = self 是什么意思?
- IOS 系统API---NSJSONSerialization四个枚举什么意思
- css中img{display:block;}是什么意思
- 请问iOS里 "->" 是什么意思?
- iOS-@2x,@3x是什么意思
- iOS Block源码分析系列(一)————2分钟明白Block究竟是什么?
- display:inline-block是什么意思
- ios是什么,ios是什么意思
- IOS 5 中@synthesize window = _window是什么意思呢
- iOS开发中的IBAction中的IB是什么意思
- ios内购功能是什么意思
- python expected an indented block什么意思
- iOS 开发,block是什么?clang -rewrite-objc反编译block,带你揭开block的神秘面纱
- c语言中的#ifndef、#def、#endif等宏是什么意思
- On Error Resume Next是什么意思