个人之对于Block的初探究
来源:互联网 发布:淘宝眼镜店排行 编辑:程序博客网 时间:2024/04/30 13:19
^(传入参数列){行为主体};
Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal。行为主体可以用return回传值,类型会被compiler自动辨别。如果没有参数列要写成: ^(void)。
定义Block变量,就相当于定义了一个函数。但是区别也很明显,因为函数肯定是在-viewDidLoad方法外面定义,而Block变量定义在了viewDidLoad方法内部。当然,我们也可以把Block定义在-viewDidLoad方法外部,例如上面的代码块printNumBlock的定义,就在-viewDidLoad外面。
(1)在类中,定义一个Block变量,就像定义一个函数;
(2)Block可以定义在方法内部,也可以定义在方法外部;
(3)只有调用Block时候,才会执行其{}体内的代码;
那么在类中定义一个Block,特别是在-viewDidLoad方法体内定义一个Block到底有什么意义呢?我表示这时候只把它当做私有函数就可以了。Block其实就相当于代理,那么这时候我该怎样将其与代理类比以了解呢。这时候可以这样说:本类中的Block就相当于类自己服从某个协议,然后让自己代理自己去做某个事情。
在Block的{}体内,是不可以对外面的变量进行更改的,如果一定要修改则要加上__block.
Block作为property属性实现页面之间传值:
这是几好用的:举个例子,两个控制器之间要传值,代理当然可以实现,Block的话,在第二个控制器定义
//NextViewController.h 文件
@interface NextViewController : UIViewController
@property (nonatomic, copy) void (^NextViewControllerBlock)(NSString *tfText);
@end
//NextViewContorller.m 文件
- (IBAction)popBtnClicked:(id)sender {
if (self.NextViewControllerBlock) {
self.NextViewControllerBlock(self.inputTF.text);
}
[self.navigationController popViewControllerAnimated:YES];
}
第一个控制器的话:
- (IBAction)btnClicked:(id)sender
{
NextViewController *nextVC = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
nextVC.NextViewControllerBlock = ^(NSString *tfText){
[self resetLabel:tfText];
};
[self.navigationController pushViewController:nextVC animated:YES];
}
#pragma mark - NextViewControllerBlock method
- (void)resetLabel:(NSString *)textStr
{
self.nextVCInfoLabel.text = textStr;
}
非常方便
- 个人之对于Block的初探究
- 个人对于OC中delegate、block的简单理解
- 对于BLock的学习
- ios学习之block初探
- block 初探 关于block的用法
- Block的使用--初探Block
- iOS 对于block的理解
- iOS 对于block的理解
- 个人对于PHP设计模式之工厂模式的理解
- 程序员 之对于个人开发的核心要素
- 对于dequeueReusableCellWithIdentifier:的个人理解
- 对于dequeueReusableCellWithIdentifier:的个人理解
- 对于java的个人见解
- 对于罗永浩个人的看法
- 对于dequeueReusableCellWithIdentifier:的个人理解
- 对于dequeueReuseableCellWithIdentifier的个人见解
- 个人对于SDN的理解
- 个人对于lower_bound的理解
- Lesson 7 Matrix-matrix and matrix-vector multiplication
- PHP 按一定比例压缩图片,保持清晰度
- NeoTalen的由来
- 使用ubuntu15.04手动搭建LNMP服务器框架
- HDU 5517 (ACM 2015 沈阳) Triple [树状数组]
- 个人之对于Block的初探究
- 玩转树莓派--图形界面登陆
- 计算机是怎样启动起来的?
- 展讯7715 Android 平台编译
- mysql截取字符串
- iOS 心得九:应用缓存的查看和清除
- HDU-2795-Billboard
- LTE上行链路反馈MCS(计算MCS、调制阶数、编码速率、频谱效率关系表格)
- Java反射机制(1)