iOS开发 - Block块的使用(三)在iOS开发中的使用
2014-11-01 21:12
232 查看
一 、block块 + Foundation框架
1.当作参数传递
enumerateObjectsUsingBlock
作用:遍历数组中的元素
2.使用局部变量
3.传递对象
对象传递进Block的方式
为保证Block中的代码正常运行,在将stopName的指针传递给Block时,Block会自动对stopName的指针做强引用
4.把Block当成一种数据类型
既然Block是一种数据类型,那么可以将Block当做比较特殊的对象
重要:解决循环引用的方法
把传入到block块中的对象之前加_weak
二、使用block块进行值传递
;
@end
在B controller 中使用 传递的值为con
2、在A controller中定义一个B controller的
在controller里定义block块
至此 A 控制器就能拿到B 控制器中的属性
1.当作参数传递
enumerateObjectsUsingBlock
作用:遍历数组中的元素
<span style="font-size:12px;">[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"第 %d 项内容是 %@", (int)idx, obj); if ([@"王五" isEqualToString:obj]) { *stop = YES; } }];</span>
2.使用局部变量
</pre><span style="font-size:12px;">使用stopIndex做停止标示符</span><pre name="code" class="objc"><span style="font-size:12px;">int stopIndex = 1; NSArray *array = @[@"张三", @"李四", @"王五", @"赵六"]; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"第 %d 项内容是 %@", (int)idx, obj); if ([@"王五" isEqualToString:obj] || idx == stopIndex) { *stop = YES; } }];</span>
3.传递对象
对象传递进Block的方式
<span style="font-size:12px;">NSString *stopName = @"王五"; NSArray *array = @[@"张三", @"李四", @"王五", @"赵六"]; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"第 %d 项内容是 %@", (int)idx, obj); if ([stopName isEqualToString:obj] || idx == stopIndex) { *stop = YES; } }];</span>
为保证Block中的代码正常运行,在将stopName的指针传递给Block时,Block会自动对stopName的指针做强引用
4.把Block当成一种数据类型
既然Block是一种数据类型,那么可以将Block当做比较特殊的对象
<span style="font-size:12px;">#pragma mark 定义并添加到数组 @property (nonatomic, strong) NSMutableArray *myBlock; int(^sum)(int, int) = ^(int x, int y) { return [self sum:x y:y]; }; [self.myBlocks addObject:sum]; int(^area)(int, int) = ^(int x, int y) { return [self area:x y:y]; }; [self.myBlocks addObject:area]; #pragma mark 调用保存在数组中的Block int(^func)(int, int) = self.myBlocks[index]; return func(x, y);</span>
重要:解决循环引用的方法
把传入到block块中的对象之前加_weak
<span style="font-size:12px;">__weak DemoObj *weakSelf = self; int(^sum)(int, int) = ^(int x, int y) { return [weakSelf sum:x y:y]; };</span>
二、使用block块进行值传递
现在需要在两个controller中传值 , 使用block块进行 1、在一个类中添加一个成员属性 @interface B Object <pre name="code" class="objc"><pre name="code" class="objc">@property (nonatomic, strong) B *b;
<pre name="code" class="objc"><pre name="code" class="objc">@property (nonatomic, strong) B *b;
;
@end
在B controller 中使用 传递的值为con
</pre><pre name="code" class="objc">_addBlock(con);
2、在A controller中定义一个B controller的
@property (nonatomic, strong) B *b;
在controller里定义block块
_b.addBlock = ^(contact *con){ NSLog(@"%@",con); };
至此 A 控制器就能拿到B 控制器中的属性
相关文章推荐
- iOS开发 - Block块的使用(二)内存管理和特性
- iOS开发之使用block块进行数据遍历的方法
- iOS开发 - Block块的使用(一)基础概念
- iOS开发之使用block块进行数据遍历的方法
- 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- Unity3d使用蓝牙(bluetooth)开发IOS点对点网络游戏
- IOS开发里面使用RGB颜色
- 使用MonoTouch进行iOS开发
- Flash开发iOS应用全攻略(三)——如何使用iOS开发者授权以及如何申请证书
- IOS 入门开发之分页栏TableBar的使用(四)
- 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- IOS开发中委托代理(degegate)的理解和使用示例
- IOS 入门开发之分页栏TabBar的使用(四)
- IOS 入门开发之创建标题栏UINavigationBar的使用(二)
- IOS 入门开发之创建标题栏UINavigationBar的使用(二)
- iOS开发学习笔记:使用xcode里的单元测试,放在STAssert…里面的语句无法使用自动完成功能
- IOS开发之──传感器使用
- 在iOS开发中如何高效使用静态库
- 在Visual Studio中使用MonoTouch开发iOS应用程序(下):开发体验
- iOS开发:xcode4中使用静态库和工作区