文档章节

iOS架构初探

她吃西红柿
 她吃西红柿
发布于 2017/03/27 11:16
字数 297
阅读 17
收藏 0

首先我们明确架构设计的目: 就是通过解耦让我们更好的管理和维护代码,下面通过一个简单的例子初步体验一下

传统方法

管理员和和员工相互引用,

Employee.h
@interface Employee : NSObject
+(instancetype)shareInstance;
- (void)doPrintJob;
@end
```

```
Employee.m
#import "Employee.h"
#import "Manager.h"
@implementation Employee
+(instancetype)shareInstance{
    static Employee *e = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        e = [[Employee alloc]init];
    });
    return e;

}

- (void)doPrintJob{

    NSLog(@"print");
    [[Manager shareInstance] celebratePrintDone];
    
}

@end

```
```
Manager.h
@interface Manager : NSObject

+(instancetype)shareInstance;
- (void)beginPrintTask;
- (void)celebratePrintDone;
@end
```
```
Manager.m
#import "Manager.h"
#import "Employee.h"
@implementation Manager
+(instancetype)shareInstance{
    static Manager *m = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        m = [[Manager alloc]init];
    });
    
    return m;

}
- (void)beginPrintTask{
    [[Employee shareInstance] doPrintJob];
}
- (void)celebratePrintDone{
    
    NSLog(@"celebrate print done");
}

```

###Delegate
管理员引用员工

Employee声明协议,和方法.
任务完成后通知Manager
```
Employee.h
@protocol EmployeePrintDelegate <NSObject>

- (void)printTaskDone;
@end
@interface Employee : NSObject
@property (nonatomic, weak) id<EmployeePrintDelegate> delegate;
@end
```
```
- (void)doPrintJob{

    NSLog(@"print");//判断代理是否实现方法 如果有再执行
    if (_delegate && [_delegate respondsToSelector:@selector(printTaskDone)]) {
        [_delegate printTaskDone];
    }
    
```

Manager 遵循协议,实现代理方法获取消息

```
#import "Manager.h"
#import "Employee.h"
@interface Manager()<EmployeePrintDelegate>

@end
@implementation Manager
+(instancetype)shareInstance{
    static Manager *m = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        m = [[Manager alloc]init];
    });
    
    return m;

}
- (void)beginPrintTask{
    [Employee shareInstance].delegate = self;
    [[Employee shareInstance] doPrintJob];
}
-(void)printTaskDone{
    [self celebratePrintDone];

}
- (void)celebratePrintDone{
    
    NSLog(@"celebrate print done");
}
@end
```


>  下一篇讲究经典的MVC架构

© 著作权归作者所有

她吃西红柿
粉丝 42
博文 52
码字总数 25812
作品 0
杭州
iOS工程师
私信 提问
Apple WatchKit 初探

Apple WatchKit 初探 2014/11/20 | 分类: IOS, 开发 | 0 条评论 | 标签: APPLE, APPLE WATCH 分享到:1 玩儿转Swift 玩转Bootstrap(基础) jQuery源码解析(架构与依赖模块) less即学即用...

andyhe91
2015/03/21
108
1
iOS 7.1 初探

iOS 7.1 beta今晨已经悄悄到来,作为一个较大的版本迭代,这次苹果带来了一系列的细节改善和性能上的提升。Cult of Mac与9to5Mac第一时间对新固件进行了测试。 (P.S目前iOS 7.1 beta 1固件已...

oschina
2013/11/19
4.5K
22
蚂蚁金服客户端招聘---求简历

职位描述 理财类金融产品应用(Android/IOS版本)的架构设计和开发工作; 根据产品需求开发相关feature,配合市场等其他部门,提供产品相关技术支持; 研究新技术、新架构,并能应用和推广到产...

LooperJing
04/26
0
0
最简单的基于FFmpeg的移动端例子:IOS HelloWorld

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47071547 ===================================================== 最简单的...

雷霄骅
2015/07/27
0
0
OSC 第 76 期高手问答 — iOS 性能优化&数据持久化

OSCHINA 本期高手问答 ( 5月27日- 6月2日) 我们请来了@智捷课堂(关东升)为大家解答关于 iOS 性能优化和数据持久化 方面的问题。 关东升,智捷课堂创始人,国内知名 iOS 技术作家,iOS 技术...

叶秀兰
2015/05/27
4.1K
28

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
5
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
6
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
4
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部