iOS11最新 - 零基础上手block

2018-05-02  本文已影响49人  SmallWhiteMouse

一.初识block

void (^testBlock)(void) = ^(){
        //最基本的block
};

这就是一个最简单的block,为了方便初学者记忆理解,我们再来用熟悉的方法/函数来对比理解:如果方法/函数都不熟,我的朋友你路还有点长啊(- -!)

- (void)test{
      //最基本的OC对象方法
}
//func:拼接传入参数并返回
NSString* (^appendParameterBlock)(NSString* , int) = ^(NSString *name,int age){

    NSMutableString  *mutalStr = [NSMutableString string];
    [mutalStr appendFormat:@"%@同学今年%d岁了",name,age];
    return mutalStr;
};

二.如何定义Block

看完上边也就几十秒左右,你可能大概有个印象了。但是你可能现在默写一个Block还是有阻碍,这里我介绍两种方便又好记的方案

1.Xcode自带代码块inline

在写代码的地方写下inline这个单词,会出现个索引,敲回车:
PS:类方法、对象方法中都行

//blockName  :block的变量名。相当于int  a;里边的a
<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
    <#statements#>
};

看到没有,舒服又方便。这下你再对比上边的参数简介是不是印象又加深了一点。(作为Coder,上手写代码还是很重要的。初始Block的朋友我建议你敲一敲inline,效果更佳)。

2.别名typedef

在你写宏定义、#import的地方 写下typedefblock又会出现个索引,即:

//name  :Block类型别名
typedef <#returnType#>(^<#name#>)(<#arguments#>);     //索引

typedef void(^myBlock)(void);       //示例

这样也可以通过起别名定义一个Block类型。

注意:

三.使用Block

1. inline定义Block的使用

就用我们那个稍微稍微复杂的那个代码来举例使用

NSString *strPrint = appendParameterBlock(@"李华",13);
NSLog(@"%@",strPrint);

2.别名typedef使用

说到起别名,我们经常使用的NSInteger也其实是个long类型的别名。(你可以点cmd+左键点击进去看下头文件看一下),既然我们起了个别名。 那我们就像用NSInteger一样使用嘛。看代码

//1.起别名
typedef void(^myBlock)(int a);

//2.定义或者叫创建一个变量
myBlock block =  ^(int a ){
    NSLog(@"%@",a);
};

//3.使用
myBlock(2);

//4.打印结果:2

四.Block的作用

上边我在介绍的时候就是用方法/函数来类比的。那么作用其实也一样,Block就是保存一段代码,然后再恰当的时候调用。

五.什么时候使用Block

六.拓展:与代理delegate的比较理解

其实我们通常有一个说法:
-block相当于一个小弟,当我有这个小弟的时候,随叫随到,想让他干什么就干什么。再通俗点:小弟你帮我先把这段代码保存起来,等用户点击页面的时候,再让小弟去做这个事情就可以了。

七.注意点

通过在.h文件定义一个block,我们来叙述一些注意点

#import <UIKit/UIKit.h>
typedef void(^PersonBlock)(int a);

@interface Person : NSObject

@property (nonatomic, copy) myBlock    block;

@end

本文旨在让初学者可以快速上手block,如果掌握以后并且想再深入理解,推荐一篇博客深入理解Block

如果您有什么疑问或者发现书写歧义,非常感激您能留言~

上一篇 下一篇

猜你喜欢

热点阅读