关于iOS的block块代码的理解
来源:互联网 发布:网络流行语2016口头禅 编辑:程序博客网 时间:2024/06/05 18:37
在学习和使用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
- 关于iOS的block块代码的理解
- 关于iOS的block块代码的理解
- iOS 关于Block代码块的详解
- IOS Block代码块的简单使用
- IOS Block代码块的简单使用
- iOS 代码块(block)的使用
- iOS中Block代码块的使用
- iOS 代码块(block)的使用
- 关于Block代码块的使用方法
- 关于Block代码块的使用
- iOS的block块
- block块的一些理解
- IOS(二)块语法block 的理解与使用
- 关于包含块(containing block)的理解
- 关于iOS block传值的理解
- iOS 代码块Block
- iOS block代码块
- iOS代码块Block
- 杭电(1085)Holding Bin-Laden Captive!
- lua的c api 总结
- struts2整合spring的两种方式
- 遥感影像的比例尺和分辨率的关系
- 输入输出流例子
- 关于iOS的block块代码的理解
- Android Studio SDK Manager无法正常下载如何设置
- redis服务器模型分析
- Flipping Game(Codeforces)(枚举)
- Delphi TClientDataSet的使用技巧
- 经典排序算法 集锦
- Delphi XE5 android 黑屏的临时解决办法
- 安装Tesseract-OCR
- 思考项目 求1-1/2+1/3-1/4···+(-1)^m*1/m的值(三种循环语句)