IOS开发基础Object-C(12)—单例模式
单例模式的意思就是仅仅有一个实例。
单例模式确保某一个类仅仅有一个实例,并且自行实例化并向整个系统提供这个实例。这个类称为单例类。
1.单例模式的要点:
显然单例模式的要点有三个;一是某个类仅仅能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
2.单例模式的长处:
我们来举一个样例吧
比方说。我们须要有一个银行,能够在银行中存钱和取钱。银行的总钱数会随着存钱取钱而变化
我们来新建一个类 银行类
//
// Bank.h
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
// #import <Foundation/Foundation.h> @interface Bank : NSObject @property int money; -(instancetype)initWithMoney:(int)money; +(Bank *)defaualtBank;
@end
实现算法 Bank.m
//
// Bank.m
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
// #import "Bank.h" @implementation Bank -(instancetype)initWithMoney:(int)money { if (self =[super init]) {
_money=money;
}
return self;
} +(Bank *)defaualtBank { static Bank *bank;//全局变量
if (!bank) {//这句确保仅仅有一个实例
bank = [[Bank alloc]initWithMoney:1000];//自行创建实例
}
return bank; }
@end
事实上最重要的就是
+(Bank *)defaualtBank;
这是单例模式的关键所在
以下我们就来新建一个Person类
// PersonOne.h
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Bank.h" @interface PersonOne : NSObject{ Bank * _bank;
} -(void)withDrawMoney:(int)money;
-(void)saveMoney:(int)money; //-(instancetype)init;
@end
实现person类
//
// PersonOne.m
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
// #import "PersonOne.h"
#import "Bank.h"
@implementation PersonOne -(instancetype)init{ if (self = [super init]) {
_bank = [Bank defaualtBank];
}
return self;
} -(void)saveMoney:(int)money { //一定要用创建单例对象的方法去创建 [_bank setMoney:[_bank money]+money]; NSLog(@"银行里还有%d",[_bank money]); } -(void)withDrawMoney:(int)money { [_bank setMoney:[_bank money]-money]; NSLog(@"银行里还有%d",[_bank money]); }
@end
最后在main方法中调用
//
// main.m
// 08-Bank
//
// Created by cuixuerui on 15/12/29.
// Copyright (c) 2015年 cuixuerui. All rights reserved.
// #import <Foundation/Foundation.h> #import "PersonOne.h"
int main(int argc, const char * argv[]) { PersonOne *p1 = [[PersonOne alloc] init]; [p1 saveMoney:500]; return 0;
}
IOS开发基础Object-C(12)—单例模式的更多相关文章
- IOS开发基础知识--碎片12
1:Delegate运用 .h #import <UIKit/UIKit.h> @protocol FilterHeaderViewDelegate <NSObject> @r ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- iOS开发基础-九宫格坐标(2)之模型
在iOS开发基础-九宫格(1)中,属性变量 apps 是从plist文件中加载数据的,在 viewDidLoad 方法中的第20行.26行中,直接通过字典的键名来获取相应的信息,使得 ViewCont ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- iOS开发——总结篇&IOS开发基础知识
IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断 ...
- IOS开发基础环境搭建
一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包: ...
- iOS开发基础-九宫格坐标(6)
继续对iOS开发基础-九宫格坐标(5)中的代码进行优化. 优化思路:把字典转模型部分的数据处理操作也拿到模型类中去实现,即将 ViewController 类实现中 apps 方法搬到 WJQAppI ...
- iOS开发基础-九宫格坐标(5)
继续在iOS开发基础-九宫格坐标(4)的基础上进行优化. 一.改进思路 1)iOS开发基础-九宫格坐标(4)中 viewDidLoad 方法中的第21.22行对控件属性的设置能否拿到视图类 WJQAp ...
- iOS开发基础-九宫格坐标(4)
对iOS开发基础-九宫格坐标(3)的代码进行进一步优化. 新建一个 UIView 的子类,并命名为 WJQAppView ,将 appxib.xib 中的 UIView 对象与新建的视图类进行关联. ...
随机推荐
- java设计模式(五)责任链模式
很多对象有每个对象对其下家的引用而连接起来形成一条链,请求在这条链上传递,直到链上某个对象决定处理此请求,应用场景如单位审批流程等. 要点:1)抽象处理者角色:定义处理请求接口及设定下家引用 2 ...
- zoj 3629 Treasure Hunt IV 打表找规律
H - Treasure Hunt IV Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- C#高级编程9-第5章 泛型
泛型 1.泛型概述 泛型是C#的部分与中间语言IL集成.创建的类或方法指定了类型,在实例化和调用时必须指定类型进行操作. 泛型可以用于类.方法.接口和委托以及结构. 泛型也是结构,同时是运行库CLR定 ...
- Windows 7 下玩游戏不能全屏
问题描述:许多用户反映,在 Windows 7 环境下,全屏游戏时两边屏幕都是黑的,只好窗口运行了.其实这是正常现象:有些游戏本身并没有提供宽屏分辨率支持.其图形界面都是按照一定比例(如 4:3)来设 ...
- window与linux文件传输工具
window与linux文件传输工具 [一般用于SecureCRT ssh中使用] 法一:直接用yum安装lrzsz(推荐) yum install lrzsz -y 注意:rhel安装完系统后 直接 ...
- Spring-3.2.5 + Quartz-2.2.1 集群实例(Tomcat+Memcached+Quartz集群session共享)
本例中我启动了两个Tomcat作效果测试,先看效果图: 现在我们关闭一个Tomcat 注意红线的位置和设置的参数有关 #org.quartz.jobStore.clusterCheckinInterv ...
- Asp.Net Core App 部署故障示例 2
相关阅读:Windows + IIS 环境部署Asp.Net Core App 1. HTTP Error 502.5 – Process Failure 环境 Windows Server 201 ...
- 【BZOJ】【1923】【Sdoi2010】外星千足虫
高斯消元解Xor方程组 ZYF Orz 这题……不作死就不会死T^T,用bitset确实比较快,而且可以从string直接转成bitset(构造函数). 但问题是我把转过来以后的顺序搞反了……原本以为 ...
- 线程池的corePoolSize、maximumPoolSize和poolSize
什么是线程池: 为了避免系统频繁的创建和销毁线程,我们可以将创建的线程进行复用.在线程池中总有那么几个活跃的线程,也有一定的最大值限制,一个业务使用完线程之后,不是立即销毁而是将其放入到线程池中,从而 ...
- 金蝶KIS下载地址
升级方法: 您好,建议您先升级到标准版7.5,再升级到标准版8.1,直接用7.5的软件打开金蝶2000的账套,会提示升级,再用8.1的软件打开7.5的账套,升级前,需先备份账套. 金蝶KIS标准版和业 ...