首页 > 其他 > 详细

黑马程序员——OC学习总结--block和反射机制

时间:2015-04-30 21:41:43      阅读:2103      评论:0      收藏:0      [点我收藏+]

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

block封装了一段代码,可以在任何时候执行
block可以作为函数参数的返回值,而其本身又可以带输入参数和返回值
 
int(^sum)(int,int)=^(int a, int b){
return a+b;
}
 
void main(){
int s=sum(2,5);//取出block定义的值
NSLog(@“s=%i”,s);
}
 
还可以用typedef定义:
 
 
typedef int(^Sum)(int,int);
 
Sum s=^(int x,int y){
return x-y;
}
Sum s2=^(int x,int y){
return x+y;
}
这样定义block可以不用限次的使用
 
 block可以使用外部定义的变量,但不能改变外部变量的值,如果想改变可以使用关键字__block(两个下划线)
 
__block int a=10;
 
Sum s=^(int x,int y){
a=6;
NSLog(@"a=%i",a);
return 0;
}
 
打印结果为 a=6
 
block对比 指向函数的指针:
 
 
 
typedef  void(*sum)(int,int) ;
typedef  int(^sump)(int,int,minus);
 
两个在typedef定义时 只一个符号之差
 
block使用
sum s=^(int a,int b){
return a+b;
}
指向函数的指针使用
要先找到与定义相匹配的类型函数
 
int sum(int a,int b,int*minus){
*minus=a-b;
return a+b;
}
 
void mian(){
int minus;
(*)sump=sum;//指针指向了函数
//也可以写成sump=sum;
int s=int(*)sump(10,8,&minus)
NSLog(@"a+b=%i",s);
NSLog(@"a-b=%i",minus);
}
 
另外block也可以快速遍历  数组,字典 。  
 
 
反射:
通过类名的字符串形式实例化对象
 
Class class="NSClassFormString"(@"Teacher");
Teacher *tea=[[[class alloc] init] autorelease];
类名变成字符串
NSString *str=NSStringFormClass(class);
 
方法反射:
通过方法名的字符串形式实例化对象
SEL selector=NSSelectorFormString(@"Test");
[Teacher performSelector:selector)];
反射成字符串输出
NSStringFormSelector(selector);

 

黑马程序员——OC学习总结--block和反射机制

原文:http://www.cnblogs.com/qiang0901/p/4469735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!