欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS App開發(fā)中使用設(shè)計(jì)模式中的單例模式的實(shí)例解析

 更新時(shí)間:2016年05月11日 12:03:31   作者:琿少  
單例模式是最簡單和基本的一種設(shè)計(jì)模式,下面我們就簡單解讀一下iOS中單例設(shè)計(jì)模式的用法,示例代碼還是為傳統(tǒng)的Objective-C,主要為了體現(xiàn)單例模式的思想,需要的朋友可以參考下

一、單例的作用
顧名思義,單例,即是在整個(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)文章

最新評論