关于iOS的block块代码的理解
2014-10-19 14:52
176 查看
在学习和使用block的这段时间, 从难以理解到现在勉强会用, 有了自己的一套理解, 希望能够帮助大家学习block, 因为block块常用于OC的方法中, 所以举了个例子来说明:
方法声明:
@interface TYPerson : NSObject
- (void)watchTYWithFriend:(void (^)(int number))person;
这是在TYPerson定义一个block块 可以理解为C语言的函数的声明 相当于c里的 void text(int number);
方法实现:
- (void)watchTYWithFriend:(void (^)(int))person
{
if (person) {
person(3);
}
}
在这里虽然是OC方法的实现 ,但是里面的Block块却可以这么理解
这里的 person(3)可以理解为c语言的函数的调用, 就相当于C里的
text (3);
方法的调用:
TYPerson *person = [[TYPerson alloc] init];
[person watchTYWithFriend:^(int number) {
printf("%d", number);
}];
这里是是调用这个OC方法, 但是里面的block代码, 就是{之间的代码} 可以理解为C语言的函数的实现 等同于
void text() {printf("%d", number);}
即:在方法的声明中,里面的block块也可以理解为声明, 但是在方法的实现里, 里面的block却恰恰相反, 理解为block的调用, 同样, 在方法的调用里, 里面的块代码, 才是block块的实现。 下面是关于block的简介
概述
- 代码块对象简称为“代码块”, 是对C语言中函数的扩展, 运行在iOS4.0和OS X 10.6版本以上
- 代码块是由C语言实现的, 所以在各种以C作为基础的语言都有效 Objcetive -C, C++ Objcetive-C++
- 代码块存储的数据是一个函数体, 使用代码块时, 可以传入参数, 并且可以获得返回值。
代码块 VS 函数指针
block格式
返回值类型 (^代码块名)(参数列表) = ^返回值类型 (参数列表){表达式;};
eg: void (^myBlock)() = ^{printf("Hello, Block\n")};
返回类型和参数列表可以有条件省略
如果不适用参数, 参数也可以省略
函数指针格式
返回值类型 (* 函数名)(参数列表);
eg:void (*myFunction) (void);
代码块用法:
void (^myBlock)() = ^{NSLog(@"hi, baby");};
myBlock();
使用typedef定义相同类型的代码块:
typedef void (^person)(id obj1, id obj2);
person myPerson; 定义一个和person一样类型的代码块myPerson
方法声明:
@interface TYPerson : NSObject
- (void)watchTYWithFriend:(void (^)(int number))person;
这是在TYPerson定义一个block块 可以理解为C语言的函数的声明 相当于c里的 void text(int number);
方法实现:
- (void)watchTYWithFriend:(void (^)(int))person
{
if (person) {
person(3);
}
}
在这里虽然是OC方法的实现 ,但是里面的Block块却可以这么理解
这里的 person(3)可以理解为c语言的函数的调用, 就相当于C里的
text (3);
方法的调用:
TYPerson *person = [[TYPerson alloc] init];
[person watchTYWithFriend:^(int number) {
printf("%d", number);
}];
这里是是调用这个OC方法, 但是里面的block代码, 就是{之间的代码} 可以理解为C语言的函数的实现 等同于
void text() {printf("%d", number);}
即:在方法的声明中,里面的block块也可以理解为声明, 但是在方法的实现里, 里面的block却恰恰相反, 理解为block的调用, 同样, 在方法的调用里, 里面的块代码, 才是block块的实现。 下面是关于block的简介
概述
- 代码块对象简称为“代码块”, 是对C语言中函数的扩展, 运行在iOS4.0和OS X 10.6版本以上
- 代码块是由C语言实现的, 所以在各种以C作为基础的语言都有效 Objcetive -C, C++ Objcetive-C++
- 代码块存储的数据是一个函数体, 使用代码块时, 可以传入参数, 并且可以获得返回值。
代码块 VS 函数指针
block格式
返回值类型 (^代码块名)(参数列表) = ^返回值类型 (参数列表){表达式;};
eg: void (^myBlock)() = ^{printf("Hello, Block\n")};
返回类型和参数列表可以有条件省略
如果不适用参数, 参数也可以省略
函数指针格式
返回值类型 (* 函数名)(参数列表);
eg:void (*myFunction) (void);
代码块用法:
void (^myBlock)() = ^{NSLog(@"hi, baby");};
myBlock();
使用typedef定义相同类型的代码块:
typedef void (^person)(id obj1, id obj2);
person myPerson; 定义一个和person一样类型的代码块myPerson
相关文章推荐
- 关于iOS的block块代码的理解
- 关于创建静态内部类的对象的理解代码
- 关于代码注释的理解
- 关于delegate 与 protocol 的理解 iOS
- 关于多态的代码理解
- [iOS]关于TableViewCell的理解以及reuseIdentifier的意义
- 关于测试代码必须做以下几件事情的下厨做菜理解法。
- 关于海滩争霸Crab代码的理解
- 关于IOS的Autolayout特性的理解以及使用
- iOS 手电筒代码和理解
- 关于Unity发布iOS平台代码混淆问题
- 关于Java核心技术书中的代码点和代码单元是怎么理解的呢?
- 关于选择执行iOS3,iOS3.2,iOS4代码的技巧
- 关于ios sdk5 arc(Automatic Reference Counting)的使用与理解
- 关于 数据源 导出excel (这是) 通过 画一个html 实现的、最简单、好理解、的代码、
- 关于Java核心技术书中的代码点和代码单元是怎么理解的呢?
- 五行代码的疑惑(关于指针的深刻理解...)
- 关于Java两种同步方法的理解(代码块级同步对象设置)
- 关于iOS Delegate的个人理解
- 关于IOS开发的一些有用的代码片段(别人总结和自己的)