前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发--block、protocol(协议)

iOS开发--block、protocol(协议)

作者头像
孙寅
发布2020-06-02 18:21:22
6210
发布2020-06-02 18:21:22
举报
文章被收录于专栏:宜达数字宜达数字

其实block是苹果官方强烈推荐,比代理好使。 那么我们要定义block怎么做?

1、简单定义block (1)有形参

代码语言:javascript
复制
int (^myBlock)(int, int);

(2)无形参

代码语言:javascript
复制
// 没有形参的无返回值block
void (^myBlock)();

2、利用block封装一段代码 (1)有形参

代码语言:javascript
复制
^(int a, int b){
  return a + b;
}

(2)无形参

代码语言:javascript
复制
^(){
  NSLog(@"------");
}

(3)无形参可以省略括号

代码语言:javascript
复制
^{
  NSLog(@"------");
}

3、如何在block中访问外部变量

代码语言:javascript
复制
int a = 20;
__block int b = 100;

// 定义一个block
void (^myBlock)();

// 封装一段代码
myBlock = ^{
  // 默认情况下可以访问外面变量的值,但是无法改变a的值
  
  // 如果想要改变外面的变量值,可以在变量前加上__block
  b = 20;
}

// 执行block
myBlock();

4、可以使用typedef定义block

代码语言:javascript
复制
//有时候频繁使用block可以使用typedef来定义block
typedef int (^myBlock)(int a, int b);

// 利用类型,定义
myBlock block;
myBlock b1, b2; 

// 可以利用类型直接赋值
b1 = ^(int a, int b){
     return a + b;
};

myBlock b3 = ^(int a, int b){
    return a * b;
};
protocol<协议>

用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,那么就拥有这个协议中的所有方法 只要父类遵守了某个协议,相当于子类也遵守了。 协议只有一.h文件,分类是有.h和.m文件

协议格式
代码语言:javascript
复制
@protocol 协议名称 <NSObject>
- (void)test;
@end
代码语言:javascript
复制
某个类遵守协议
       // 继承 :  // 遵守协议<>
@interface 类名 :父类 <协议名称>
@end
协议中的几个关键字
代码语言:javascript
复制
// 如果什么都不选,那么默认是@required,必须实现
 @required // 必须实现
 @optional // 可选的,不要求实现
基协议

NSObject是最基本的类,任何其他类都要继承它 <NSObject>是基协议,它中声明了很多方法,比如retain/release/description, 每一个新的协议都要遵守NSObject这个基协议

以后写一份协议,一定要遵守<NSObject>
变量保存对象遵守协议

定义一个变量,限制这个变量保存的对象也遵守某个协议 类名<协议名称> *变量名 SYCar <MyProtocol> *obj; id<协议名称> 变量名 id <MyProtocol> oc;

声明属性遵守协议

在@property中声明属性也可以遵守协议来限制

代码语言:javascript
复制
@property (nonatomic, strong) 类名<协议名称>*属性名

@property (nonatomic, strong) Car <MyProtocol> *car

@property (nonatomic, strong) id <MyProtocol> car2;

开发注意点: 如果一个协议,只有一个类去遵守的话,写在类声明文件即可 如果一个协议,有多个类去遵守,那么写在外面。

分类也可以定义在单独的.h.m文件,也可以定义在原来类中。 1>一般情况下都是定义在单独文件(开发一般就是常用这种) 2>定义在原来类中的分类。

协议代理设计

我们通过代理可以达到一些自己无法处理的事情。

代理中执行方法:

一定要注意耦合性 所以代理必须要有协议,只有通过遵守协议,实现协议中的方法达到解决耦合性这个问题

1、生成代理协议

2、谁成为代理谁遵守协议

3、实现代理协议方法

4、顺利解耦

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • protocol<协议>
  • 协议格式
  • 协议中的几个关键字
  • 基协议
  • 以后写一份协议,一定要遵守<NSObject>
  • 变量保存对象遵守协议
  • 声明属性遵守协议
  • 协议代理设计
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档