background image

 6 
 7 
 8 - (IBAction)click3:(id)sender
 9 {
10     if(self.callBack)
11         self.callBack(3);
12 }
 

现在完成了调用,具体的实现在哪呢,我们回到

a 当中,在 a 中执行跳转界面

的地方,加上相关的实现。
 
1  

 

 

 

  SecondViewController   *secondController   = 

[[SecondViewController 
alloc]initWithNibName:@"SecondViewController" bundle:nil];
2     
3     secondController.callBack = ^(int index)
4     {
5         self.clickBtnLabel.text = [NSString stringWithFormat:@"click 
%d", index];
6     };
7     
8         [self.navigationController pushViewController:secondController 
animated:YES];
在是用

block 的时候,要注意所有权的问题,要小心产生循环,那样会导致资

源无法释放。
例如在

block 中使用了一个指针,恰巧这个指针又是 block 的拥有者,那么会

产生一个循环引用,他们都是强引用,无法释放。为了避免产生类似的问题,就
需要用

__weak 标记 block 的拥有者。delegate 和 block 在上面时候是用,要

看具体情况,如果一个类的

delegate 里有很多方法,那还是放在 delegate 里

实现吧。
 
2、系统定义的 block
ios 当中还有大量系统已经定义好的 block,使用这些 block 实现特定的一些功
能,能是整体代码更加简洁和高效。
例如遍历字典的时候,

ios 就提供了:

- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, 
BOOL *stop))block;
简单举个例子,我们要在字典中根据

key 来查找某个 value,然后把 value 记

录下来。

 

 1     NSArray *keyArray = @[@"aa", @"ddd", @"cc", @"bb", @"ww", 

                   找软件资料,就到一览软件文库

http://wk.yl1001.com/rj/