代碼塊
前言
大多書本上的代碼塊講解非常的累贅和複雜,其實代碼塊我們可以把它理解爲C裏面的函數,就是把一些代碼封裝起來,使它們可以模塊化使用。
代碼塊(block)的聲明與實現
代碼塊的作用
block 允許開發者在兩個對象之間任意語句當作數據進行傳遞
block 使用了與一個函數相同的機制,可以像聲明一個函數一樣來聲明block;可以像定義一個函數的方法一樣來定義一個block,也可以講block當做對象來調用
代碼塊的聲明:
返回值類型(^代碼塊的名稱)(參數列表);
代碼塊的實現:
代碼塊的名字 =^(參數列表)(代碼塊的行爲主體)
//代碼塊的聲明:
void(^aBlock)(NSString *x);
//代碼塊的實現:
aBlock = ^(NSString *x){
NSLog(@"x = %@",x);
};
//代碼塊的調用
aBlock(@"Rick");
double(^getArea)(double width, double height);
getArea = ^(double width, double height){
double area=width*height;
return area;
};
double area = getArea(5,10);
NSLog(@"area =%.2f",area);
在block中使用全局變量和局部變量
全局變量和局部變量的作用在於我們想要調用一個在某個方法或循環、函數裏面的一個變量時,我們可以根據需要將它定義爲全局或局部變量,使它可以在方法執行完畢後仍然可以被調用。
#import "ViewController.h"
@interface ViewController ()
@end
int global =100;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//void(^myBlock)()
//myBlock =^(){};
//等價於
void(^myBlock)()=^(){
global++;
NSLog(@"global = %d",global);
};
myBlock();
//局部變量
__block int local =100;
void(^myBlock2)()=^(){
local++;
NSLog(@"local = %d",local);
};
myBlock2();
}
@end