标签:ret ios开发 调用 alt ace pop init article str
单例模式的意思就是仅仅有一个实例。
单例模式确保某一个类仅仅有一个实例,并且自行实例化并向整个系统提供这个实例。这个类称为单例类。
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 // 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
// // 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.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; }
标签:ret ios开发 调用 alt ace pop init article str
原文地址:http://www.cnblogs.com/clnchanpin/p/7347943.html