iOS开发之技能点iOS开发程序员

block使用详解

2016-03-10  本文已影响1434人  蒋昉霖

今天系统写了些关于block的一些变量定义跟方法调用

首先,block到底怎么用,什么时候用,怎么才能想到去用,应该是一个新手程序员最头疼的问题

下面,为具体给出一个block简单的具体写法,让大家感受一下大体的流程

我们一边整理思路,一边上代码

#import <UIKit/UIKit.h>
// 给block起个名儿
typedef void(^blockBack)(NSString *tf);
@interface NextViewController : UIViewController
/** block,注意block用copy修饰,但是不带“*”号 */
// strong也可以,但是建议copy
@property (nonatomic, copy) blockBack tfblock;
@end

#import "NextViewController.h"
@interface NextViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;
@end
@implementation NextViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}
// 点击按钮
- (IBAction)sentTo:(id)sender {
    // 叫小弟(block)过来,让他做事
    if (_tfblock != nil) {
        NSString *str = _tf.text;
        _tfblock(str);
    }
    [self dismissViewControllerAnimated:YES completion:^{}];
}
@end
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // 拿到第二个页面,让label.text = textField
    // 这个赋值运算就是小弟(block)干的事儿
    NextViewController *vc = segue.destinationViewController;
    vc.tfblock = ^(NSString *str){
        _label.text = str;
    };
}

上面这个demo有个很明显的弊端,就是我们在写这些block的时候,全程手打所有的符号,这样很不方便,所以,我们来写第二个demo,利用回调

要求:
控制器上有个按钮,点击按钮,让他颜色改变成固定颜色,
思路:
把这个改变颜色事件当成一个做事的小弟(block)

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
// 定义一个block,取个名儿
typedef void(^ChangeColor)(UIColor *color);
@interface ColorBtn : NSObject
// 直接写回调方法,把这个block当做参数传出,不用单独定义block
+ (void)ChangeViewBtnColor:(ChangeColor)changeColorBlock;
@end

#import "ColorBtn.h"
@implementation ColorBtn
+ (void)ChangeViewBtnColor:(ChangeColor)changeColorBlock
{
    NSLog(@"进来了");
    // color参数传出
    UIColor *color = [UIColor redColor];
    // 调用block做事
    changeColorBlock(color);
}
@end
- (IBAction)colorBtn:(id)sender {
    [ColorBtn ChangeViewBtnColor:^(UIColor *color) {
        [_colorBtn setBackgroundColor:color];
    }];
}

可能看着有点混乱,但是基本就是这么个思路,把block想成小弟来看,就能了解到什么时候考虑去用这个block了

上一篇 下一篇

猜你喜欢

热点阅读