在以前的一片文章中介紹了對象的拷貝相關知識:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天咱們來看一下OC中的單例模式,單例模式在設計模式中用的多是最多的一種了,並且也是最簡單的一種java
實現單例模式有三個條件設計模式
一、類的構造方法是私有的學習
二、類提供一個類方法用於產生對象測試
三、類中有一個私有的本身對象spa
針對於這三個條件,OC中都是能夠作到的.net
一、類的構造方法是私有的設計
咱們只須要重寫allocWithZone方法,讓初始化操做只執行一次指針
二、類提供一個類方法產生對象code
這個能夠直接定義一個類方法對象
三、類中有一個私有的本身對象
咱們能夠在.m文件中定義一個屬性便可
下面來看代碼:
AdressBook.h
// // AdressBook.h // 35_Singleton // // Created by jiangwei on 14-10-13. // Copyright (c) 2014年 jiangwei. All rights reserved. // #import <Foundation/Foundation.h> //設計單利類的目的,限制這個類只能建立一個對象 //構造方法爲私有的 //保存一個全局的static變量 @interface AdressBook : NSObject + (AdressBook *)shareInstance; @end在.h文件中提供了一個類方法,用於產生對象的
AdressBook.m
// // AdressBook.m // 35_Singleton // // Created by jiangwei on 14-10-13. // Copyright (c) 2014年 jiangwei. All rights reserved. // #import "AdressBook.h" static AdressBook *instance = nil;//不能讓外部訪問,同時放在靜態塊中的 @implementation AdressBook + (AdressBook *)shareInstance{ if(instance == nil){ instance = [[AdressBook alloc] init]; } return instance; } //限制方法,類只能初始化一次 //alloc的時候調用 + (id) allocWithZone:(struct _NSZone *)zone{ if(instance == nil){ instance = [super allocWithZone:zone]; } return instance; } //拷貝方法 - (id)copyWithZone:(NSZone *)zone{ return instance; } //須要重寫release方法,不能讓其引用+1 - (id)retain{ return self; } //須要重寫release方法,不能讓其引用-1 - (oneway void)release{ //do Nothing... } - (id)autorelease{ return self; } @end
static AdressBook *instance = nil;//不能讓外部訪問,同時放在靜態塊中的
+ (AdressBook *)shareInstance{ if(instance == nil){ instance = [[AdressBook alloc] init]; } return instance; }
//限制方法,類只能初始化一次 //alloc的時候調用 + (id) allocWithZone:(struct _NSZone *)zone{ if(instance == nil){ instance = [super allocWithZone:zone]; } return instance; }
//拷貝方法 - (id)copyWithZone:(NSZone *)zone{ return instance; } //須要重寫release方法,不能讓其引用+1 - (id)retain{ return self; } //須要重寫release方法,不能讓其引用-1 - (oneway void)release{ //do Nothing... } - (id)autorelease{ return self; }拷貝方法只能返回當前的單實例
retain和release方法不能進行引用的+1和-1操做
測試代碼
main.m
// // main.m // 35_Singleton // // Created by jiangwei on 14-10-13. // Copyright (c) 2014年 jiangwei. All rights reserved. // #import <Foundation/Foundation.h> #import "AdressBook.h" //單利模式 int main(int argc, const char * argv[]) { @autoreleasepool { AdressBook *book1 = [AdressBook shareInstance]; AdressBook *book2 = [AdressBook shareInstance]; NSLog(@"%@",book1); NSLog(@"%@",book2); } return 0; }兩個指針指向的是同一個對象
總結
這一篇文章主要介紹了OC中的單例模式,同時咱們OC學習篇的系列章程也就結束了,固然這些並不表明OC中全部的內容,還有不少其餘內容,咱們只有後面慢慢的去使用他纔會愈來愈瞭解。