close
当前位置: 物联网在线 > 技术文库 > ios >

iOS常用设计模式

1.为什么学习设计模式

对于设计模式,我们并不陌生。一谈起设计模式,脑海里马上就想到单例模式,委托模式,观察者模式等等。而面试官们也通常把对“某某设计模式”的掌握程度作为考评求职者的重要指标之一。那么问题来了,为什么要学习设计模式呢?没有设计模式我们同样能够实现功能,为什么还要“多此一举”呢?原因很简单,所谓的设计模式,只是为了开发者更好地去理解程序,说白了代码是死的,它们本身没有什么设计模式可言,只是开发者为了更好地理解程序,总结了一些设计模式,为的是让代码看上去更有条理,也便于人们理解。

2.介绍几种比较常用的设计模式 单例模式 单例模式的应用场景

单例模式的作用是解决应用程序中只有一个实例的问题,这在我们设计中会经常遇到,比如应用程序启动时,应用状态由UIApplication类一个实例维护,还有NSUserDefaults和NSNotificationCenter等单例。

单例模式的具体实现

oc版

+(Singleton *)sharedInstance{ static Singleton *sharedSingleton = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedSingleton = [[Singleton alloc] init]; }); return sharedSingleton; }

swift版

private let sharedInstance = Singleton() class Singleton: NSObject { class var sharedManager: Singleton { return sharedInstance; } } 委托模式 委托设计模式类图

iOS常用设计模式

委托设计模式类图

委托模式的应用场景

在iOS开发中,用到的系统的UITextField或者UITableView等都是应用的委托模式设计的,我们自己在开发过程中也会经常遇到,比如一些保存个人信息的界面,将信息填写完成之后,便可采用委托的方式将信息回传到首界面展示个人信息。还有很多类子,在这里就不一一列举了。

委托模式的具体实现

这里举一个简单的类子,比如我一天只干三件事,吃饭,睡觉,工作,为了更好地工作和生活,我请了一个助理。要成为我的助理,需要实现一个协议,协议要求能够处理吃饭,睡觉,工作问题。通用类就是我(coderPeng类),通过代理(delegate)属性保持委托对象的引用.委托对象(ViewController)就是我的助理,它实现了了协议coderPengDelegate.coderPengDelegate定义了三个方法:sleep,eat,work方法.

oc版

CoderPeng类中的代码 .h中的代码 @protocol CoderPengDelegate <NSObject> @required - (void)sleep; - (void)eat; - (void)work; @end @interface CoderPeng : NSObject //weak修饰为了防止内存的"强引用循环",从而避免内存泄漏问题 @property (nonatomic,weak)id<CoderPengDelegate>delegate; - (void)start; @end .m中的代码 -(void)start{ if (self.delegate && [self.delegate respondsToSelector:@selector(sleep)] && [self.delegate respondsToSelector:@selector(eat)] && [self.delegate respondsToSelector:@selector(work)]) { [self.delegate sleep]; [self.delegate work]; [self.delegate eat]; } } ViewControler类中的代码 @interface ViewController ()<CoderPengDelegate> @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. CoderPeng *coderPeng = [[CoderPeng alloc] init]; coderPeng.delegate = self; [coderPeng start]; } #pragma mark 协议方法 -(void)sleep{ NSLog(@"睡觉"); } - (void)eat{ NSLog(@"吃饭"); } - (void)work{ NSLog(@"工作"); } @end

swift版

CoderPeng类中的代码 protocol coderPengDelegate { func sleep() func eat() func work() } class CoderPeng: NSObject { var delegate:coderPengDelegate? func start() { self.delegate?.sleep() self.delegate?.eat() self.delegate?.work() } } ViewController类中的代码 class ViewController: UIViewController,coderPengDelegate { override func viewDidLoad() { super.viewDidLoad() let coderPeng = CoderPeng() coderPeng.delegate = self coderPeng.start() } //MARK:协议方法 func sleep() { print("睡觉") } func eat() { print("吃饭") } func work() { print("工作") } } 观察者模式 观察者模式简述

观察者模式也叫发布/订阅模式,是MVC模式的重要组成部分,它有4个角色,具体如下:

1. 抽象主题(Subject): 在swift中,抽象主题是一个协议,它是一个观察者集合容器,定义了添加观察者方法,移除观察者方法和为所有观察者发送通知的方法;

2. 抽象观察者(Observer): 在swift中,抽象观察者也是一个协议,它有一个更新方法;

3. 具体观察者(ConcreteObserver): Observer协议的具体实现;

4. 具体主题(ConcreteSubject): Subject协议的具体实现.

引入Subject和Observer这俩个协议之后,不仅提高了系统的可复用性,还降低了耦合度。

通知机制和KVO机制

在Cocoa Touch框架中,观察者模式的具体应用有俩个——通知机制和KVO机制,下面介绍这俩个机制:

通知机制


(责任编辑:ioter)

用户喜欢...

干货 WiFi产品常用射频功率放大器汇总

在这些年的WiFi产品开发中,接触了多种型号的射频功率放大器(以下简称PA),无线时代对WiFi产品中常用的射频功率放大器做个汇总,供读者参考。本文中部分器件型号是Frontend Module,即包含...


让你生活更简单的几个不常用的Linux命令

作为一个软件工程师,学习Linux是我做过的最好的时间投资。因为它是一个用户必须理解和维护的系统,每天的使用经验就像在水坑中添加一滴水一样。很长时间以后,水坑就变成了湖泊,甚至...


Unity架构常用的几种方式

对于初学者来说,视频《Unity项目架构设计与开发管理》(),全是干货。简单的总结了一下,Unity的架构有如下几种常用的方式。 1、EmptyGO: 在Hierarchy上创建一个空的GameObject,然后挂上所有与...


Linux常用指令及操作

Linux 常用指令 使用命令man+【具体指令名称】可以查看该指令的详细使用方式 Ubuntu用户首次设置root用户密码: 在终端输入命令 sudo passwd,输入当前用户的密码然后回车进行设置 ls 显示文件或...


电路设计中三种常用接地方法

地线也是有阻抗的,电流流过地线时,会产生电压,此为噪声电压,而噪声电压则是影响系统稳定的干扰源之一,不可取。所以,要降低地线噪声的前提是降低地线的阻抗。 众所周知,地线...


10种常用电感的特性比较分析

10种常用电感罗列 1:工字型电感; 2:色环电感; 3:空芯电感: 4:环形线圈电感; 5:贴片叠层高频电感; 6:磁棒电感; 7:SMD贴片功率电感; 8:穿心磁珠 9:贴片磁珠; 10:贴片高频变压器,插件高频变压器; 归纳...


机器学习特征选择常用算法

1. 综述 (1) 什么是特征选择 特征选择 ( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ) ,或属性选择( Attribute Selection ) ,是指从全部特征中选取一个特征子集,使构造出来的模型更...


光电耦合器设计中九大常用要点

光电耦合器在电子电路设计中是一种必不可少的器件,其能够将光能与电能进行互相转换,从而达到对电能进行自由掌控的目的。并且随着现代电源设备的多样化发展,光电耦合器的应用场合...


几种常用电容器结构及特点介绍

电容器是电子设备中常用的电子元件,下面对几种常用电容器的结构和特点作以简要介绍,以供大家参考。 1.铝电解电容器 它是由铝圆筒做负极、里面装有液体电解质,插人一片弯曲的铝带...


常用CMOS模拟开关功能和原理

CMOS模拟开关是一种可控开关,它不象继电器那样可以用在大电流、高电压场合,只适于处理幅度不超过其工作电压、电...