這是我的開園第一篇,至于為什么要寫單例模式,是因為我在學習ios之初對單例模式的概念比較模糊,特意在這做一次整理,希望可以和大家分享。
一,ios單例模式的概念(什么是單例模式)
單例模式最主要的一點就是只有一個實例。實例是什么?實例就是對象一個叫法,對象實例化,用前輩的一個比喻就是說:制作月餅的磨具就是類,月餅就是對象,制作月餅的過程叫做對象實例化。
這個類只擁有一個實例,我們稱之為單例類。這個單例類需要向整個工程或者說里面的各個類提供它的實例,通俗一點說,小明(實例對象)在一年級四班,他可以被叫到語文辦公室,也可以被數學辦公室點名。
優點么,實例只有一個,你說呢,,,
二,單例模式的應用
下面是我的一個Demo,非常通俗(單例模式一般情況下如何創建使用)
DAO.h
1 #import <Foundation/Foundation.h>2 @interface DAO : NSObject3 + (DAO *)sharedDAO; //類方法
4 -(void)PRintYourName; //實例方法,就是過會實例要干的事情5 @end
DAO.m
1 #import "DAO.h" 2 static DAO *instance=nil; //靜態實例化一個對象 ,為什么是static,因為類方法也叫做靜態方法 3 @implementation DAO 4 5 + (DAO *)sharedDAO //判斷實例是否為空,初始化它,作用就是獲得DAO的單例對象 6 { 7 if(instance==nil) 8 { 9 instance=[[DAO alloc] init];10 }11 return instance;12 }
13
14 -(void)printYourName //實例方法,在BL.m中將會調用
15 {
16 NSLog(@"張三");
17 }
@end
BL.h
1 #import <Foundation/Foundation.h>2 #import "DAO.h"3 4 @interface BL : NSObject5 6 @property (nonatomic,strong) DAO *dao; //創建一個叫dao的對象7 8 @end
BL.m
1 #import "BL.h" 2 3 4 5 @implementation BL 6 - (id)init //初始化 7 { 8 self=[super init]; 9 if(self)10 {11 self.dao=[DAO sharedDAO]; //獲得了單例對象12 13 [self.dao printYourName]; //用這個單例對象來調用DAO.m中的實例方法14 15 }16 return self;17 }18 19 @end
這是較為簡單一個demo,手打了一部分,可能會有瑕疵望指正。
對于剛剛學習ios的同學可能會幫助。在MVC開發模式中經常要運用到,當然這個demo比較初級,能夠節省內存空間和時間,但存在多線程狀態下并發問題,當然網上有很多改進版,大家可以搜索研習。
新聞熱點
疑難解答