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

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

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

int (^myBlock)(int, int);

(2)无形参

// 没有形参的无返回值block
void (^myBlock)();

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

^(int a, int b){
  return a + b;
}

(2)无形参

^(){
  NSLog(@"------");
}

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

^{
  NSLog(@"------");
}

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

int a = 20;
__block int b = 100;

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

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

// 执行block
myBlock();

4、可以使用typedef定义block

//有时候频繁使用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文件

协议格式

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

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

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

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

声明属性遵守协议

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

@property (nonatomic, strong) 类名<协议名称>*属性名

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

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

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

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

协议代理设计

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

Paste_Image.png
Paste_Image.png
Paste_Image.png

代理中执行方法:


Paste_Image.png

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

1、生成代理协议


Paste_Image.png

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


Paste_Image.png

3、实现代理协议方法


Paste_Image.png

4、顺利解耦


Paste_Image.png

5、

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容