------- android培训、java培训、期待与您交流! ----------
1,block代码块
Block对象是一个c级别的语法和运行机制。它与标准的c函数类似,不同之处在于,它除了有可执行的代码外,还包含了与堆,栈内存绑定的变量。
Block 是一个基本数据类型,用于存放代码段
c与oc基本类型区别:SEL,id,Block,boolean,BOOL
^操作符:用于声明一个block变量,
int (^myBlock)(int) = ^(int num){ return code;};
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
void(^myBlock)()=^(){
NSLog(@"HELLO BLOCK");
};
myBlock();
}
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
void(^myBlock)()=^(){
NSLog(@"HELLO BLOCK");
};
myBlock();
//myBlock2(1,2);
void (^myblock2)(int ,int)= ^(int a,int b){
NSLog(@"%d",a+b);
};
myblock2(2,3);
myblock2=^(int x,int y){
NSLog(@"%d",x>y?x:y);
};
myblock2(12,6);
int (^myblock3)(int ,int)=^(int a,int b){
return a+b;
};
int ret = myblock3(12,33);
NSLog(@"RET=%d",ret);
}
return 0;
}
2,typedef
1,函数指针:int(*p)(int x,int y);
#include <stdio.h>
int sum(int x,int y){return x+y;}
int jian(int x,int y){return x-y;}
int main(int argc, const char * argv[]) {
// insert code here...
int (*p)(int x,int y);
p=sum;
int a = p(2,3);
printf("%d",a);
return 0;
}
用typedef修饰block
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
void(^myBlock)()=^(){
NSLog(@"HELLO BLOCK");
};
myBlock();
//myBlock2(1,2);
void (^myblock2)(int ,int)= ^(int a,int b){
NSLog(@"%d",a+b);
};
myblock2(2,3);
myblock2=^(int x,int y){
NSLog(@"%d",x>y?x:y);
};
myblock2(12,6);
int (^myblock3)(int ,int)=^(int a,int b){
return a+b;
};
int ret = myblock3(12,33);
NSLog(@"RET=%d",ret);
typedef void(^newType)(int ,int);
newType a;
a=^(int x,int y){
NSLog(@"X+Y=%d",x+y);
};
a(2,3);
}
return 0;
}
block访问外部变量
1,block可以访问外部的变量
2,block不可以修改外部的变量
3,block同名变量,局部屏蔽外部变量作用域
4,给要访问的变量加上__block关键字,即可修改
block应用场景
block使用技巧