最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、單例的作用
顧名思義,單例,即是在整個(gè)項(xiàng)目中,這個(gè)類的對(duì)象只能被初始化一次。它的這種特性,可以廣泛應(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í)例化對(duì)象的方法重寫:

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

注意:這里的alloc使用了斷言,讓任何視圖通過alloc創(chuàng)建對(duì)象的程序段斷在此處,給程序員提示。copy方法這里只是簡(jiǎn)單的返回了原對(duì)象,并未做任何處理,打印信息給程序員提示。

相關(guān)文章

最新評(píng)論

宜兰市| 苍梧县| 香港 | 达孜县| 上犹县| 察哈| 海阳市| 垫江县| 福泉市| 凤庆县| 鄯善县| 山西省| 聊城市| 镇平县| 保定市| 玉田县| 象州县| 桐乡市| 乌恰县| 鹤峰县| 沙洋县| 新巴尔虎左旗| 南漳县| 龙岩市| 五家渠市| 株洲县| 鄂托克旗| 合阳县| 庄河市| 揭西县| 绍兴市| 郓城县| 兴隆县| 辽源市| 湖口县| 城步| 申扎县| 五峰| 沈阳市| 张家港市| 冷水江市|