資源描述:
《設計模式 For iOS-02-單例模式.pdf》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。
1、設計模式ForiOS第02式單例模式整理:BeyondVincent(破船)時間:2013.05.09目錄目錄2第02式單例模式................31.0.簡介...................................................31.0.1.什么是單例模式......................31.0.2.什么時候使用單例模式?......41.1.iOS中單例模式的實現(xiàn)方法............41.2.單例的使用..................
2、.....................91.3.代碼下載地址.................................101.4.參考.................................................11關于設計模式ForiOS的整理.....122第02式單例模式1.0.簡介1.0.1.什么是單例模式單例模式是一個類在系統(tǒng)中只有一個實例對象。通過全局的一個入口點對這個實例對象進行訪問。在iOS開發(fā)中,單例模式是非常有用的一種設計模式。如下圖,是一個簡單單例模式的
3、UML類圖。iOSSDK中也有許多類使用了單例模式,例如,UIApplication:當程序啟動的時候,會調用UIApplicationMain方法,在該方法中,會實例化一個UIApplication對象,之后在程序中的任意地方調用sharedApplication方法都將返回一個與當前應3用程序相關的UIApplication實例(UIApplicationMain方法中創(chuàng)建的UIApplication單例)。1.0.2.什么時候使用單例模式?在程序中,單例模式經(jīng)常用于只希望一個類只有一個實例,而不運行一
4、個類還有兩個以上的實例。當然,在iOSSDK中,根據(jù)特定的需求,有些類不僅提供了單例訪問的接口,還為開發(fā)者提供了實例化一個新的對象接口,例如,NSFileManager可以通過defaultManager方法返回相同的一個NSFileManager對象。如果需要新的一個NSFileManager實例對象,可以通過init方法。1.1.iOS中單例模式的實現(xiàn)方法iOS中單例模式的實現(xiàn)方式一般分為兩種:Non-ARC(非ARC)和ARC+GCD。1)NON-ARC(非ARC)非ARC的實現(xiàn)方法如下所示:BVNo
5、nARCSingleton.h4////BVNonARCSingleton.h//SingletonPattern////CreatedbyBeyondVincenton13-5-9.//Copyright(c)2013年BeyondVincent.Allrightsreserved.//#import<Foundation/Foundation.h>@interfaceBVNonARCSingleton:NSObject@property(nonatomic,retain)NSString*t
6、empProperty;+(BVNonARCSingleton*)sharedInstance;@endBVNonARCSingleton.m////BVNonARCSingleton.m//SingletonPattern////CreatedbyBeyondVincenton13-5-9.//Copyright(c)2013年BeyondVincent.Allrightsreserved.//#import"BVNonARCSingleton.h"@implementationBVNonARCSingl
7、etonstaticBVNonARCSingleton*sharedInstance=nil;//獲取一個sharedInstance實例,如果有必要的話,實例化一個+(BVNonARCSingleton*)sharedInstance{if(sharedInstance==nil){sharedInstance=[[superallocWithZone:NULL]init];}returnsharedInstance;}//當?shù)谝淮问褂眠@個單例時,會調用這個init方法。-(id)init{self=[s
8、uperinit];if(self){//通常在這里做一些相關的初始化任務5}returnself;}//這個dealloc方法永遠都不會被調用--因為在程序的生命周期內容,該單例一直都存在。(所以該方法可以不用實現(xiàn))-(void)dealloc{[superdealloc];}//通過返回當前的sharedInstance實例,就能防止實例化一個新的對象。+(id)allocWithZone:(NSZone*)