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

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

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

一、單例的作用
顧名思義,單例,即是在整個項目中,這個類的對象只能被初始化一次。它的這種特性,可以廣泛應(yīng)用于某些需要全局共享的資源中,比如管理類,引擎類,也可以通過單例來實現(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)可以使用類方法來得到這個單例,但很多時候,項目的工程量很大,還有可能會很多開發(fā)者同時參與一個項目的開發(fā),為了安全與管理代碼的方便,也為了給不是這個單例的創(chuàng)作者但會用到這個單例的開發(fā)人員一些提示,我們通常會重寫一些方法:

首先我們自己實現(xiàn)一個alloc方法:

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

將我們的單例實現(xiàn)方法略作修改:

+(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創(chuàng)建對象的程序段斷在此處,給程序員提示。copy方法這里只是簡單的返回了原對象,并未做任何處理,打印信息給程序員提示。

相關(guān)文章

最新評論

嘉善县| 洪江市| 襄汾县| 塘沽区| 南丰县| 武鸣县| 阜平县| 穆棱市| 蓬莱市| 云阳县| 洪雅县| 加查县| 罗甸县| 古浪县| 冀州市| 黎城县| 西青区| 任丘市| 琼结县| 城固县| 乌恰县| 清镇市| 上饶县| 隆化县| 祥云县| 竹溪县| 郓城县| 珠海市| 宁海县| 台南市| 万盛区| 湘潭县| 桦川县| 崇信县| 乐平市| 东丽区| 保康县| 宁武县| 横峰县| 邮箱| 定远县|