请教下 objective-c 中代码块的问题。

frank_ren 发布于 2014年07月10日
无人欣赏。

在objc的代码块中 使用本地变量 和 全局变量有什么区别。

绿橙子教程 使用本地变量

#import <Foundation/Foundation.h>
 typedef double (^MKSampleMultiplyBlockRef)(void);

int main(int argc, const char * argv[]) {
@autoreleasepool {
    double a = 10,b=20;
    MKSampleMultiplyBlockRef multiply = ^(void){return a*b;};
    NSLog(@"%f",multiply());
    a = 20,b=30;
    NSLog(@"%f",multiply());
}
return 0;
}

输出: 200.000000 200.000000

这里输出值相同,没有因为变量值而改变的原因 绿橙子书解释是:

代码块会在定义时复制并保存它们的状态。

同样绿橙子介绍在代码块中使用全局变量的时候 代码:

#import <Foundation/Foundation.h>
typedef double (^MKSampleMultiplyBlockRef)(void);

int main(int argc, const char * argv[]) {
  @autoreleasepool {
    static double a = 10,b=20;
    MKSampleMultiplyBlockRef multiply = ^(void){return a*b;};
    NSLog(@"%f",multiply());
    a = 20,b=30;
    NSLog(@"%f",multiply());
   }
 return 0;
}

输出:200.000000

600.000000 请教为什么使用全局变量后输出值发生了改变? 书中没有介绍。特来请教。 3q~~~

共6条回复
tinyfool 回复于 2014年07月10日

block就说block千万不要翻译成代码块,太容易混淆了

frank_ren 回复于 2014年07月11日

1楼 @tinyfool 这个。。 我是看绿橙子的翻译就是代码块啊。。 好吧 block 话说能帮我解答下这个问题么。。 谢谢

董一凡 回复于 2014年07月11日

看这里 block规则,看不懂再问

tinyfool 回复于 2014年07月11日

2楼 @frank_ren 不要乱看翻译,看三楼给的文档吧

frank_ren 回复于 2014年07月11日

4楼 @tinyfool 这个。。 入门找了绿橙子先看看了~

frank_ren 回复于 2014年07月11日
登录 或者 注册