block基本使用
#import <Foundation/Foundation.h>
int main00() {
// //block的使用
// void (^print)(void) = ^(void)
// {
// NSLog(@"我正在學習objective C :block");
// };
// print();
// //無返回值無參數
//
// double (^sumD)(double,double) = ^(double a,double b)
// {
// return a+b;
// };
// double sum = sumD(10.4,20.4);
// NSLog(@"%lf",sum);
// //有返回值,有參數
//
// void (^printStr)(NSString*);
// printStr = ^(NSString *str){
// NSLog(@"%@",str);
// };
// //無返回值,有參數
// printStr(@"hahahah");
//注意點
//1.默認局部變量在block中是可以訪問的,但是不能修改 2.在執行的過程中block是要使用的局部的值,在定義block的時候就寫死了,所以是20,不是45
// int my = 20;
// void (^print)(void) = ^()
// {
// //my = 30;
// NSLog(@"%d",my);
// };
//
// my = 45;
// print();
//解決方法:__block 去修飾這個
__block int my = 20;
void (^print2)() = ^()
{
NSLog(@"%d",my);
my = 30;
NSLog(@"%d",my);
//my = 40;
};
print2();
return 0;
}
block+typedef 複用+回調
<pre name="code" class="objc">#import <Foundation/Foundation.h>
//typedef功能 1.複用block類型 2.使用block做函數參數時使用
typedef void (^FKProcessBlock)(int);
void processArray(int array[],unsigned int len,FKProcessBlock process)
{
for(int i=0;i<len;i++)
{
process(array[i]);
}
}//回調:你調用別人的函數,在別人的函數中引用你自己的函數,你中有我,我中有你
int main()
{
// typedef void (^PrintBlock)(NSString *str);
//
// PrintBlock print = ^(NSString *info)
// {
// NSLog(@"%@",info);
// };
//
// PrintBlock printLoop = ^(NSString *info)
// {
// for(int i=0;i<3;i++)
// {
// NSLog(@"%@",info);
// }
// };
//
// print(@"oc ...");
// printLoop(@"ios");
int arr[] = {2,4,6};
processArray(arr, 3, ^(int num)
{
NSLog(@"%d",num*num);
});
return 0;
}