您的位置:首页 > 职场人生

黑马程序员-oc-Block

2015-08-22 01:25 495 查看
------- 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使用技巧

------- android培训java培训、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: