IOS中的__block關鍵字簡單使用
/**13.__block什麼時候用?**/
結論:在block裡面修改局部變數的值都要用__block修飾
/**14.請教一個問題:在block裡面, 對數組執行添加操作, 這個數組需要聲明成 __block嗎?**/
不需要聲明成__block,因為testArr數組的指標並沒有變(往數組裡面添加對象,指標是沒變的,只是指標指向的記憶體裡面的內容變了)
/**15.在block裡面, 對NSInteger進行修改, 這個NSInteger是否需要聲明成__blcok ?**/
NSInteger的值發生改變,則要求添加__block修飾
代碼執行個體:
NSMutableArray *testArr =[[NSMutableArray alloc] initWithObjects:@"1",@"2", nil]; __block NSInteger a=10; /**結論:在block裡面修改局部變數的值都要用__block修飾**/ void (^TestBlock)(void) = ^{// NSMutableArray *temArr=[[NSMutableArray alloc] init];// testArr=temArr;//testArr數組的指標發生改變時,testArr要添加__block修飾 a=100;//a的值發生改變,則要求添加__block修飾// testArr不需要聲明成__block,因為testArr數組的指標並沒有變(往數組裡面添加對象,指標是沒變的,只是指標指向的記憶體裡面的內容變了) [testArr addObject:[NSString stringWithFormat:@"3"]]; NSLog(@"_block testArr :%@ a:%d", testArr,a); }; a=0; TestBlock(); NSLog(@"testArr :%@ a:%d", testArr,a);
運行結果:
2015-05-13 20:16:23.862 WXMovie_study[22827:1683307] _block testArr :(
1,
2,
3
) a:100
2015-05-13 20:16:23.862 WXMovie_study[22827:1683307] testArr :(
1,
2,
3
) a:100