前言:
本小節(jié)知識點:
1.【了解】什么是Block
2.【理解】block的格式
1.Block的概念:
Block是iOS中一種比較特殊的數據類型
Block是蘋果官方特別推薦使用的數據類型, 應用場景比較廣泛
動畫
多線程
集合遍歷
網絡請求回調
Block的作用
用來保存某一段代碼, 可以在恰當的時間再取出來調用
功能類似于函數和方法
2.Block的格式:
Block的定義格式
返回值類型 (^block變量名)(形參列表) = ^(形參列表) {
};
block最簡單形式
void (^block名)() = ^{代碼塊;}
例如:
void (^myBlock)() = ^{ NSLog(@"李南江"); };
block帶有參數的block的定義和賦值
void (^block名稱)(參數列表)
= ^ (參數列表) { // 代碼實現; }
例如:
void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
帶有參數和返回值的block
返回類型 (^block名稱)(參數列表)
= ^ (參數列表) { // 代碼實現; }
例如:
int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
調用Block保存的代碼
block變量名(實參);
3.block和typedef的使用:
由于相同的部分可以抽離出來闸与,所以需要使用typedef:
OC的block的用法
#import <Foundation/Foundation.h>
int main(int argc,onst char * argv[])
{
int (^sumBlock)(int,int);
sumBlock = ^(int value1,int value2){
return value1 + value2;
};
NSLog(@"sum = %i",sumBlock(20,10));
int (^minBlock)(int,int);
minBlock = ^(int value1,int value2){
return value1 - value2;
};
NSLog(@"min = %i",minBlock(20,10));
return 0;
}
使用typedef之后:
#import <Foundation/Foundation.h>
typedef int (^calculteBlock)(int,int);
int main(int argc,onst char * argv[])
{
calculteBlock sumBlock = ^(int value1,int value2){
return value1 + value2;
};
NSLog(@"sum = %i",sumBlock(20,10));
calculteBlock minBlock = ^(int value1,int value2){
return value1 - value2;
};
NSLog(@"min = %i",minBlock(20,10));
return 0;
}
4.block的應用場景:
在學習UI之后就會體會到block的好處。
如果在block中訪問了外界的對象贸伐,一定要給對象加上__block海洼,只要加上了__block眷昆,哪怕block在堆中纪蜒,也不會對外界的對象進行retain袁稽。
加了__block就是地址傳遞侈沪,不加__block是值傳遞欲虚。正因為是值傳遞集灌,所以可以訪問其值,或者return返回其值复哆。