OC 重点block-------1-------基本使用
来源:互联网 发布:免激活windows xp 编辑:程序博客网 时间:2024/05/20 06:23
block的使用,确实是很重要,也是苹果强推的东西,再巩固下
1.OC在C的基础上做的三件事情
面向对象繁琐复杂的简化在C的基础上,新增的数据类型(BOOL Boolen class SEL nil id block)
2. Block---是一个数据类型,既然是个数据类型,那么就可以声明这个数据类型的变量,所以block,完全可以声明一个block类型的变量
block类型的变量中可以存储什么样的数据:1.blcok是一个数据类型,所以我们可以声明一个block类型的变量,
2.block类型的变量中抓们存储一段代码,这段代码可以有参数,可以有返回值。
3.block变量的声明:
1)。虽然这个block变量中是用来存储一个代码的,但是block变量中,并不是任意的一段代码都可以存进去的,而是有限定的,也就是说我们在声明这个block变量的时候,必须要指定这个block变量,存储的代码段,是否有参数,是否有返回值,一旦指定以后这个block变量中就只能存储这样的代码了。
譬如:声明一个block变量,返回值void参数是一个int类型的,这个时候,这个block变量中,就只能存储无返回值并且有一个int参数的代码段
2)。声明block变量的语法格式:
返回值类型(^block变量的名称)(参数列表);
void(^myBlock1)();表示声明一个block类型的变量,叫做myBlock1这个变量只有存储没有返回值,没有参数的代码段。
int(^myBlock2)();
int(^myBlock3)(int num1,int num2);这个变量返回值是int,两个参数的代码段。
3).最重要的是,声明block变量的时候要制定这个block变量可以存储的代码段的返回值和参数描述,一旦指定,这个block变量,就只能存储这样的代码段,其他格式代码无法存储
4,初始化,block变量
1)。原理:写一个符合block要求的代码段,存储到block变量中就可以了,
2.代码段的书写格式:
^返回值类型(参数列表){
代码段;
};
6.block的简写
1)。如果我们的代码段没有返回值,那么代码段void可省略
2)。如果代码段没有参数,那么()也可省略,如果代码段没有参数也没返回值,那么可以都省略
3)。如果生命block的时候,如果有指定的参数,可以只写参数的类型,而不懈参数的名称
4)。无论代码段是否有有返回值,在写代码的时候,可以不写返回值类型(如果再写代码段的时候,省略了返回值,这个时候系统会自动的确定返回值的类型,如果带么段中没有返回数据,那么他会认为这个代码段没有返回值的,如果代码中有返回值,返回数据是什么类型,他就会认为这个代码是什么类型的)
7.简化block变量的复杂定义
1)。typefy:讲一个长类型定义为一个短类型
2)。我们可以用typedef讲长类型的block类型,定义为一个短类型
typedef void (^newType)(); 是一个block类型,无参数无返回值的类型
8.block也可以作为返回值:当讲block作为函数的返回值的时候,返回值的类型必须要使用typedef定义的短类型
9.block和函数的区别
相同点:都是封装一段代码
不同点:block是个数据类型,函数是一个函数;
所以我们可以声明一个block类型的变量,函数只是个函数:
block可以作为函数的参数,而函数不能直接作为函数的参数
--------------------由于block 挺重要的,后面分开很多板块在补充着内容
*/
3)譬如无参数无返回值的代码段
^void(){
NSLog(@"nisb");
NSLog(@"sbnishi");
};
这个时候,我们就可以将这段代码使用赋值符号存储到,无返回值无参数要求的block变量中。
myBlock1 = ^void(){
NSLog(@"nisb");
NSLog(@"sbnishi");
};
当然也可以在声明block变量的同时使用符合要求的代码段初始化
4)。有返回值的代码段
^int(){
int num1 = 10;
return num1;
};
我们就可以将这段代码赋值给要求的代码段就可以了
5.如何执行,存储在block中的代码段
语法格式:block变量名();
#import <Foundation/Foundation.h>
int main(int argc,constchar * argv[]) {
@autoreleasepool {
// void(^myBlock1)();
// int(^myBlock2)();
// int(^myBlock3)(int num1,int num2);
void(^myBlock1)() = ^void(){
NSLog(@"我爱你");
NSLog(@"我恨你");
};
int(^myBlock2)() = ^int(){
int num1 =10+20;
return num1;
};
int(^myBlock3)(int num1,int num2) = ^int(int num1,int num2){
int num3 = num1 +num2;
return num3;
};
myBlock1();
int sum = myBlock2();
NSLog(@"sum----====%d",sum);
int sum2 = myBlock3(100,200);
NSLog(@"sum2====%d",sum2);
}
return0;
}
- OC 重点block-------1-------基本使用
- OC 重点block-------4-------block案例1
- OC 重点block-------3-------block如何作为函数的参数
- OC 重点block-------5-------block作为函数的返回值
- oc block的使用
- OC-Block使用
- OC--Block的使用
- oc block简单使用
- OC------block块的使用
- OC中Block的使用
- OC block的简单使用
- OC中的block使用初探
- OC之Block的使用
- OC中Block的使用
- OC-简单的使用BLOCK
- OC之block使用场合
- OC之Block的使用
- OC语言学习22-Block基本语法
- Module State
- Android Native 使用初识
- android之职责清晰的MVP设计模式
- 移动app测试之多任务和意外情况处理办法
- oracle导入dmp数据文件问题
- OC 重点block-------1-------基本使用
- 【深入Java虚拟机】之四:类加载机制
- PAT 乙级 1038. 统计同成绩学生(20)
- Goldbach`s Conjecture (数论,素数打表)
- Guava缓存值CacheBuilder介绍
- linux系统性能调优第一步——性能分析(vmstat)
- str-...的函数的模拟实现学习
- SpringMVC处理模型数据(1)
- Android编程实现自动检测版本及自动升级的方法