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",
找软件资料,就到一览软件文库