iOS App開發(fā)中使用設(shè)計(jì)模式中的單例模式的實(shí)例解析
一、單例的作用
顧名思義,單例,即是在整個(gè)項(xiàng)目中,這個(gè)類的對象只能被初始化一次。它的這種特性,可以廣泛應(yīng)用于某些需要全局共享的資源中,比如管理類,引擎類,也可以通過單例來實(shí)現(xiàn)傳值。UIApplication、NSUserDefaults等都是IOS中的系統(tǒng)單例。
二、單例模式的兩種寫法
1,常用寫法
#import "LGManagerCenter.h" static LGManagerCenter *managerCenter; @implementation LGManagerCenter +(LGManagerCenter *)sharedManager{ if(!managerCenter) managerCenter=[[self allocWithZone:NULL] init]; return managerCenter; } @end
2,用GCD創(chuàng)建單例類
#import "LGManagerCenter.h" @implementation LGManagerCenter +(LGManagerCenter *)sharedManager{ static dispatch_once_t predicate; static LGManagerCenter * managerCenter; dispatch_once(&predicate, ^{ managerCenter=[[LGManagerCenter alloc] init]; }); return managerCenter; } @end
其中dispatch_once函數(shù)只執(zhí)行一次。
三、代碼的優(yōu)化
通過上面的方法,我們已經(jīng)可以使用類方法來得到這個(gè)單例,但很多時(shí)候,項(xiàng)目的工程量很大,還有可能會(huì)很多開發(fā)者同時(shí)參與一個(gè)項(xiàng)目的開發(fā),為了安全與管理代碼的方便,也為了給不是這個(gè)單例的創(chuàng)作者但會(huì)用到這個(gè)單例的開發(fā)人員一些提示,我們通常會(huì)重寫一些方法:
首先我們自己實(shí)現(xiàn)一個(gè)alloc方法:
+(instancetype)myAlloc{ return [super allocWithZone:nil]; }
將我們的單例實(shí)現(xiàn)方法略作修改:
+(ZYHPayManager *)sharedMamager{ static ZYHPayManager * manager; if (manager==nil) { manager=[[ZYHPayManager myAlloc]init]; } return manager; }
將一些視圖實(shí)例化對象的方法重寫:
+(instancetype)alloc{ NSAssert(0, @"這是一個(gè)單例對象,請使用+(ZYHPayManager *)sharedMamager方法"); return nil; } +(instancetype)allocWithZone:(struct _NSZone *)zone{ return [self alloc]; } -(id)copy{ NSLog(@"這是一個(gè)單例對象,copy將不起任何作用"); return self; } +(instancetype)new{ return [self alloc]; }
注意:這里的alloc使用了斷言,讓任何視圖通過alloc創(chuàng)建對象的程序段斷在此處,給程序員提示。copy方法這里只是簡單的返回了原對象,并未做任何處理,打印信息給程序員提示。
相關(guān)文章
ios 11和iphone x的相關(guān)適配問題及解決方法
這篇文章主要介紹了ios 11和iphone x的相關(guān)適配,文中給大家提到了在ios 11中,tableView會(huì)莫名偏移問題的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11查看iOS已上架App的Crash信息定位、應(yīng)對處理方式的實(shí)例
下面小編就為大家?guī)硪黄榭磇OS已上架App的Crash信息定位、應(yīng)對處理方式的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12iOS實(shí)現(xiàn)選項(xiàng)卡效果的方法
選項(xiàng)卡在我們?nèi)粘i_發(fā)的時(shí)候經(jīng)常要用到,所以這篇文章給大家分享一種iOS實(shí)現(xiàn)的簡單選項(xiàng)卡效果,很適合大家學(xué)習(xí)和使用,有需要的可以參考借鑒,下面來一起看看吧。2016-09-09iOS實(shí)現(xiàn)知乎和途家導(dǎo)航欄漸變的文字動(dòng)畫效果
這篇文章給大家分享了利用iOS實(shí)現(xiàn)知乎和途家導(dǎo)航欄漸變的文字動(dòng)畫效果,有需要的朋友們可以參考借鑒。下面來一起看看。2016-09-09iOS中的NSURLCache數(shù)據(jù)緩存類用法解析
iOS App中具體緩存操作的管理我們通常是用NSURLCache類來實(shí)現(xiàn)的,下面我們就來看一下iOS中的NSURLCache數(shù)據(jù)緩存類用法解析:2016-06-06基于UIControl控件實(shí)現(xiàn)ios點(diǎn)贊功能
在開發(fā)當(dāng)中,可能很多時(shí)候都需要做個(gè)點(diǎn)贊的需求,如果用按鈕實(shí)現(xiàn),按鈕作為一個(gè)系統(tǒng)復(fù)合控件,外部是一個(gè) View--》UIControl的容器,本文給大家分享一個(gè)基于UIControl控件實(shí)現(xiàn)ios點(diǎn)贊功能,需要的朋友可以參考下2015-09-09iOS 中根據(jù)屏幕寬度自適應(yīng)分布按鈕的實(shí)例代碼
這篇文章主要介紹了iOS 中根據(jù)屏幕寬度自適應(yīng)分布按鈕的實(shí)例代碼,本文給大家分享兩種方式,代碼簡單易懂,需要的朋友可以參考下2016-11-11