中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Block的整理

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用


1. 在 B 控制器的.h文件中定義聲明Block屬性


typedef void (^MyBlock)(NSString *);

@interface BViewControl: UIViewController


@property (nonatomic, copy) MyBlock returnBlock;

@end

第一行代碼是為要聲明的Block重新定義了一個名字 MyBlock

這樣,下面在使用的時候就會很方便。

第三行是定義的一個Block屬性

2.  B控制器.m文件中


- (void)viewWillDisappear:(BOOL)animated {

if (self.MyBlock ) {

self.MyBlock(self.inputTF.text);

}

}

self.inputTF.text 是回傳的字符串

3.在A控制器.m文件中

如下方法中書寫:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

BViewControl *VC = segue.destinationViewController;

VC.returnBlock = ^(NString* string){

self.textLabel.text = string;

}];

}

可以看到代碼中的注釋,系統(tǒng)告訴我們可以用[segue destinationViewController]來獲得B視圖控制器。


4.BLock訪問局部變量

{

int A = 8;

int (^Block)(int) = ^(int a){ return A + a;}; //block里面可以讀取同一類型的outA的值

A = 5;  //在調(diào)用Ptr之前改變A的值

int result = Block(3);  // result的值仍然是11,并不是8

NSLog(@"result=%d", result);

為什么result 的值仍然是11?而不是8呢?事實上,myPtr在其主體中用到的outA這個變量值的時候做了一個copy的動作,把outA的值copy下來。所以,之后outA即使換成了新的值,對于myPtr里面copy的值是沒有影響的。

需要注意的是,這里copy的值是變量的值,如果它是一個記憶體的位置(地址),換句話說,就是這個變量是個指針的話,

注意:

1.在某個變量前面如果加上修飾字“__block”的話(注意,block前面有兩個下劃線),這個變量就稱作block variable

2.直接存取static類型的變量

3.那么在block里面就可以任意修改此變量的值


3.把Block 當成參數(shù)傳遞給一個函數(shù)


//function的定義,將Block作為參數(shù)

-void myFunction:(int (^mySquare)(int))myFunction;   

//定義一個myBlock的Block 變量

int (^myBlock)(int) = ^(int a){

return a*a;

}; 

myFunction(myBlock);    //把mySquare作為myFunction的參數(shù)

標簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:你需要知道的12個Git高級命令

下一篇:Java程序員使用的20幾個大數(shù)據(jù)工具