(1)指向函数的指针的定义方法和调用:
#import <Foundation/Foundation.h>
void test(){
NSLog(@"hello");
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
//定义
void (*p1)()=test;
//使用
p1();
}
return 0;
}而block的定义与之类似。
//定义block,注意^以及末尾的分号;右边的函数体也不再需要函数名称,只要前面有myBlock即可
void (^myBlock)()=^{
NSLog(@"hello");
};
//调用,和函数类似
myBlock();block于指向函数的指针的区别在于:后者只能在后面放一个函数名,而不能直接把函数的代码(函数体)整个放在后面。而前者弥补了这个缺陷,相当于把整个代码块“封装”在一起了。
(2)带有参数的block
//定义block,注意^以及末尾的分号;
int (^sum1)(int a,int b)=^int (int a,int b){
return a+b;
};
//调用,和函数类似
NSLog(@"%d",sum1(5,6));(3)既然是数据类型,它也可以当做参数进行传递。
(4)如果需要在block代码中改变block外的变量,需要在该变量前面添加__block关键字。
理解Objective-C中的Block与函数指针
本文详细解释了Objective-C中Block和函数指针的定义、使用方式及区别,包括如何创建带参数的Block,Block作为参数传递,以及在Block内部改变外部变量的方法。
4742

被折叠的 条评论
为什么被折叠?



