iOS App開發中使用設計模式中的單例模式的執行個體解析_IOS

來源:互聯網
上載者:User

一、單例的作用
顧名思義,單例,即是在整個項目中,這個類的對象只能被初始化一次。它的這種特性,可以廣泛應用於某些需要全域共用的資源中,比如管理類,引擎類,也可以通過單例來實現傳值。UIApplication、NSUserDefaults等都是IOS中的系統單例。

二、單例模式的兩種寫法
1,常用寫法

#import "LGManagerCenter.h"static LGManagerCenter *managerCenter;@implementation LGManagerCenter+(LGManagerCenter *)sharedManager{  if(!managerCenter)    managerCenter=[[self allocWithZone:NULL] init];  return managerCenter;}@end

2,用GCD建立單例類

#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函數只執行一次。

三、代碼的最佳化
通過上面的方法,我們已經可以使用類方法來得到這個單例,但很多時候,項目的工程量很大,還有可能會很多開發人員同時參與一個項目的開發,為了安全與管理代碼的方便,也為了給不是這個單例的創作者但會用到這個單例的開發人員一些提示,我們通常會重寫一些方法:

首先我們自己實現一個alloc方法:

+(instancetype)myAlloc{  return [super allocWithZone:nil];}

將我們的單例實現方法略作修改:

+(ZYHPayManager *)sharedMamager{  static ZYHPayManager * manager;  if (manager==nil) {    manager=[[ZYHPayManager myAlloc]init];  }  return manager;}

將一些視圖執行個體化對象的方法重寫:

+(instancetype)alloc{  NSAssert(0, @"這是一個單例對象,請使用+(ZYHPayManager *)sharedMamager方法");  return nil;}+(instancetype)allocWithZone:(struct _NSZone *)zone{  return [self alloc];}-(id)copy{  NSLog(@"這是一個單例對象,copy將不起任何作用");  return self;}+(instancetype)new{  return [self alloc];}

注意:這裡的alloc使用了斷言,讓任何視圖通過alloc建立對象的程式段斷在此處,給程式員提示。copy方法這裡只是簡單的返回了原對象,並未做任何處理,列印資訊給程式員提示。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.