(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关键字。
时间: 2024-12-19 04:59:14