/**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