iOS开发指南 第8章 iOS常用设计模式 学习

设计模式是在特定场景下对特定问题的解决方案

1 单例模式

作用:解决“应用中只有一个实例”的问题,这个实例的作用是全局的,比如说是可以实现一些共享资源 方法的访问和状态的保持

实现原理:一般会封装一个静态属性,并提供静态实例的创建方法。

***********

James Rumbaugh对类的定义是:类是具有相似结构、行为和关系的一组对象的描述符。类是面向对象系统中最重要的构造块。类图显示了一组类、接口、协作以及他们之间的关系。

建立类图的步骤:

(1)研究分析问题领域确定系统需求。

(2)确定类,明确类的含义和职责、确定属性和操作。

(3)确定类之间的关系。

***********

@synthesize singletonData = _singletonData;
初始化
static Singleton *sharedManager = nil;

+ (Singleton*)sharedManager
{
    static dispatch_once_t once;GCD提供的结构体,将参数地址传给函数
    dispatch_once(&once, ^{作用是只执行一次代码块,还是线程同步的
        sharedManager = [[self alloc] init];
    });
    return sharedManager;
}

UIApplication类:+shareApplication

idleTimerDisabled属性:设定和获得“空闲时间禁止”

-openURL:打开一些内置的iOS应用

-stringByAddingPercentEscapesUsingEncoding:将字符串转换为URL编码

2 委托模式

我们需要将看似功能很强但是很难维护的类,按照职责将他的属性或方法分派到各自的类或分解成功能明确的类。

框架类:通用 可重复使用 与具体应用无关的特点,保持委托对象的指针,并在特定时间像委托对象发送消息。

相关类:与具体应用有关,由于受到框架类的控制,应用相关类一般被设计成“协议”。

委托对象与通用类建立引用关系:通用类实例对象.delegate=委托对象

前三步:定义delegate属性用于保存委托对象的引用-建立委托协议.h

后三步:声明实现委托-建立引用关系-实现委托方法

委托方法命名:should消息应该返回一个布尔值,用于确定委托是否会响应消息

will/did

这三种方法都会把发送消息对象以参数的形式回传回来

3 观察者模式

MVC模式中的重要组成部分,又叫发布/订阅模式

1)通知机制

接收者:注册通知-addObserver:selector:name:object:userInfo:

解除通知-removeObserver:

投送对象:-postNotificationName:object:userInfo:字典对象

-postNotification:

一般是程序进行到一个阶段时候需要通知其他对象做something

2)KVO机制

在对象属性变化时直接将通知发送给接收者

属性变化的对象发送消息要求观察者开始观察属性变化:addObserver:

forKeyPath:属性

options:为属性变化设置的选项  NSKeyValueObservingOptions类型

context:上下文内容  是c语言任何指针类型

观察者需要重写:-observeValueForKeyPath:ofObject:change:context:以响应属性的变化

4 MVC

UIViewController是所有控制器的根类  UIView是所有视图和控件的根类

因为我们要通过控制器更新视图和控件,所以需要将这些视图定义为输出口类型的属性

模型对象可以通过通知机制来通知数据的变化

视图控制器可以保存一个模型成员变量或属性,并通过他们改变模型的状态。

时间: 2024-10-25 22:26:47

iOS开发指南 第8章 iOS常用设计模式 学习的相关文章

IOS开发指南第四章 IOS8多分辨率屏幕适配 学习

1 获取IOS设备屏幕信息 CGSize iOSDeviceScreenSize = [UIScreen mainScreen].bounds.size; NSString *s = [NSString stringWithFormat:@"%.0f x %.0f", iOSDeviceScreenSize.width, iOSDeviceScreenSize.height]; 获取设备信息判断是否是ipone-判断横屏还是竖屏-判断设备型号 属性userInterfaceIdiom是

iOS 开发指南 第12章 应用程序设置

1 概述 设置中的项目在应用中是不经常变化的,它决定了应用的基本特征和行为. 配置是在应用内部开辟出来的功能块,是应用的一部分,项目是经常变化的. 2 应用程序设置包 Settings Bundle是一个包文件,其中含有设置界面中所需的项目的描述 用到的照片 文字的本地化 子设置项目的描述等内容.通过finder打开. Root.plist文件描述根设置界面中设置的项目信息. en.lproj文件夹和Root.strings文件是和本地化有关,用于设置界面信息的本地化. 创建:iOS-Resou

iOS 开发指南 第16章 定位服务与地图应用之使用苹果地图

1 显示地图 MKMapView MKMapViewDelegate 准备:加载MapKit.framework 设置地图样式 代理-实现代理方法 - (void)viewDidLoad { [super viewDidLoad]; 设置样式,枚举类型MKMapType self.mapView.mapType = MKMapTypeStandard; // self.mapView.mapType = MKMapTypeSatellite; 将当前视图控制器赋值给地图视图的delegate属性

iOS 开发指南 第15章 访问Web Service之REST Web Service

***** 在电脑术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串. 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作.URI由包括确定语法和相关协议的方案所定义. Web上可用的每种资源 -HTML文档.图像.视频片段.程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位. ***** 1 REST Web Ser

iOS 开发指南 第11章 数据持久化之SQLite 学习

1 SQLite是无数据类型的数据库,就是字段不用指定类型.但从编程规范上说,应该在Create Table语句中指定数据类型:INTERGER 有符号的整数类型 REAL 浮点类型 TEXT 字符串类型 BLOB二进制类型 2 创建数据库: 准备:添加SQLite3库到工程中 TARGETS-Link Binary With Libraries-添加libsqlite3.dylib 使用sqlite3_open打开数据库-使用sqlite3_exec执行Creat Table语句,创建数据库-

IOS 开发指南 第5章 委托协议 数据源协议 高级视图学习

1 委托对象负责控制控件的外观和对控件的事件和状态作出反应 数据源对象是控件与应用数据(model)的桥梁,一般是必须实现的. 2 选择器 UIPickerView 为用户提供选择 1)日期选择器 UIDatePicker 设置属性检查器中的各个属性-代码 -setDateFormat:设置日期格式 -stringFromDate:获取时间 - (IBAction)onclick:(id)sender { NSDate * theDate = self.datePicker.date;获取选中日

iOS开发指南 第7章 视图控制器与导航模式 学习

1 概述 分类:平铺导航模式 标签导航模式 树形导航模式 2 模态视图 必须要一个单独的模态视图控制器 呈现 代码方法:presentViewController:animated:completion: 故事板segue方式 关闭 dismissViewControllerAnimated:completion: 获取navigationBar:拖拽一个 Editor-Embed in-Navigation Controller 创建一个navigation controller interf

iOS 开发指南 第16章 定位服务与地图应用

1 定位服务编码 使用Core Location框架 CLLocationManger:用于定位服务管理类,能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向等. CLLocation:封装了位置和高度信息. CLLocationMangerDelegate 准备:加载Core Location框架 修改工程配置:Supporting Files-Info.pist添加NSLocationAlwaysUSageDescription和NSLocation

iOS 开发指南 第15章 访问Web Service之数据交换格式

“自描述的”结构化文档 1 XML文档结构 声明:定义了XML文件的版本和使用的字符集 <> 根元素:开始标签  结束标签 子元素:开始标签 结束标签 属性:  定义在开始标签中 属性名 属性值(放置在双引号或单引号之间) 一个元素不能有多个名字相同的属性. 命名空间:为XML文档提供名字唯一的元素和属性 ************ XML 命名空间提供避免元素命名冲突的方法. XML Namespace (xmlns) 属性 XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法: