精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Objective-C中單例模式的實現

移動開發 iOS
單例模式是對象的創建模式之一,此外還包括工廠模式。單例模式的三個特點:1、該類只有一個實例。2、該類自行創建該實例(在該類內部創建自身的實例對象)。3、向整個系統公開這個實例接口。

單例模式在Cocoa和Cocoa Touch中非常常見。比如這兩個,[UIApplication sharedApplication]和[NSApplication sharedApplication],大家應該都見過。但是我們應該如何在代碼中實現一個單例模式呢?

1.如果你對蘋果的文檔很熟悉的話,你一定知道,在Cocoa Foundamentals Guide中有一段實現單例模式的示例代碼。大致如下

  1. /* Singleton.h */ 
  2. #import <Foundation/Foundation.h> 
  3. @interface Singleton : NSObject 
  4. + (Singleton *)instance; 
  5. @end 
  6.       
  7. /* Singleton.m */ 
  8. #import "Singleton.h" 
  9. static Singleton *instance = nil; 
  10.       
  11. @implementation Singleton 
  12. + (Singleton *)instance { 
  13. if (!instance) { 
  14.     instance = [[super allocWithZone:NULL] init]; 
  15.     return instance; 
  16. + (id)allocWithZone:(NSZone *)zone { 
  17.     return [self instance]; 
  18. - (id)copyWithZone:(NSZone *)zone { 
  19.     return self; 
  20. - (id)init { 
  21.      if (instance) { 
  22.        return instance; 
  23.     self = [super init]; 
  24.     return self; 
  25. - (id)retain { 
  26.     return self; 
  27. - (oneway void)release { 
  28.     // Do nothing 
  29. - (id)autorelease { 
  30.     return self; 
  31. - (NSUInteger)retainCount { 
  32.     return NSUIntegerMax; 
  33. @end 

這是一種很標準的Singleton實現,中規中矩。不過這種實現并不是線程安全的。所以各路大神都各顯神威,給出了多種單例模式的實現。

2.Matt Gallagher在博客中放出了一個Macro,用來實現單例模式。雖然是一個宏定義的代碼,但是具體實現還是很清楚的。代碼如下:

  1. //  SynthesizeSingleton.h 
  2. //  CocoaWithLove 
  3. //  Created by Matt Gallagher on 20/10/08. 
  4. //  Copyright 2009 Matt Gallagher. All rights reserved. 
  5. //  Permission is given to use this source code file without charge in any 
  6. //  project, commercial or otherwise, entirely at your risk, with the condition 
  7. //  that any redistribution (in part or whole) of source code must retain 
  8. //  this copyright and permission notice. Attribution in compiled projects is 
  9. //  appreciated but not required. 
  10. // 
  11. #define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \ 
  12. static classname *shared##classname = nil; \ 
  13. + (classname *)shared##classname \ 
  14. { \ 
  15. @synchronized(self) \ 
  16.     { \ 
  17.          if (shared##classname == nil) \ 
  18.          { \ 
  19.              shared##classname = [[self alloc] init]; \ 
  20.           } \ 
  21.      } \ 
  22.       return shared##classname; \ 
  23. } \ 
  24. + (id)allocWithZone:(NSZone *)zone \ 
  25. { \ 
  26. @synchronized(self) \ 
  27.      { \ 
  28.         if (shared##classname == nil) \ 
  29.            { \ 
  30.               shared##classname = [super allocWithZone:zone]; \ 
  31.               return shared##classname; \ 
  32.             } \ 
  33.       } \ 
  34.     return nil; \ 
  35. } \ 
  36. - (id)copyWithZone:(NSZone *)zone \ 
  37. { \ 
  38.     return self; \ 
  39. } \ 
  40. - (id)retain \ 
  41. { \ 
  42.     return self; \ 
  43. } \ 
  44. - (NSUInteger)retainCount \ 
  45. { \ 
  46.     return NSUIntegerMax; \ 
  47. } \ 
  48. - (void)release \ 
  49. { \ 
  50. } \ 
  51. - (id)autorelease \ 
  52. { \ 
  53.     return self; \ 

是不是感覺這兩種方法很拖沓,別擔心,后面將介紹簡單的實現單利的方法!

#p#

3.然而,eschaton則覺得這些實現都太繁瑣了,他給出的實現如下:

  1. @interface SomeManager : NSObject 
  2. + (id)sharedManager; 
  3. @end 
  4.  
  5. /* 非線程安全的實現 */ 
  6. @implementation SomeManager 
  7. + (id)sharedManager { 
  8. static id sharedManager = nil; 
  9. if (sharedManager == nil) { 
  10.     sharedManager = [[self alloc] init]; 
  11.     return sharedManager; 
  12. @end 
  13.  
  14. /* 線程安全的實現 */ 
  15. @implementation SomeManager 
  16. static id sharedManager = nil; 
  17. + (void)initialize { 
  18.       if (self == [SomeManager class]) { 
  19.       sharedManager = [[self alloc] init]; 
  20.     } 
  21. + (id)sharedManager { 
  22.     return sharedManager; 
  23. @end 

關于為什么上述代碼就能實現單例模式,以及關于線程安全問題的考量,請參考他的博客

4.最后介紹一個比較現代的單例模式實現。為什么說現代呢?因為這種實現利用了GCD(Grand Central Dispatch)和ARC(Automatic Reference Counting)。核心代碼如下:

  1. + (id)sharedInstance 
  2.     static dispatch_once_t pred = 0; 
  3.     __strong static id _sharedObject = nil; 
  4.     dispatch_once(&pred, ^{ 
  5.     _sharedObject = [[self alloc] init]; // or some other init method 
  6.     }); 
  7.     return _sharedObject; 

作者還寫了一個宏(gist)來方便使用,大家可以閱讀作者的博文A note on Objective-C singletons了解詳情。

大多數情況下,Apple官方文檔里的單例模式的示例代碼實現已經夠用了。雖然它最繁瑣,但是也是本文介紹的幾種單例模式中最容易理解的一個。至于其他的實現就留給讀者們根據需要選擇和應用了。

責任編輯:閆佳明 來源: oschina
相關推薦

2013-06-20 10:40:32

Objective-C實現截圖

2011-07-25 10:03:06

Objective-C 委托

2011-07-19 17:24:31

Objective-C 對象

2011-08-15 17:47:13

Objective-CisMemberOfC

2011-08-04 15:52:48

Objective-C HTML

2015-07-08 16:07:19

iOSObjective-C

2011-08-10 18:07:29

Objective-C反射

2011-08-04 10:57:33

Objective-C C語言 BOOL

2013-03-27 12:54:00

iOS開發Objective-C

2011-05-11 15:58:34

Objective-C

2011-05-11 11:20:26

Objective-C

2012-01-11 09:15:45

Objective-C

2015-07-08 10:51:27

Objective-CRuntime

2011-06-28 15:18:45

Qt 單例模式

2011-07-20 13:34:37

Objective-C self.

2011-07-27 16:18:42

Objective-c 協議

2011-08-15 17:06:01

Objective-CNSLog

2011-07-08 18:44:09

Objective-C Self Super

2014-11-25 10:18:17

Objective-C

2014-07-29 09:44:35

點贊
收藏

51CTO技術棧公眾號

强行糟蹋人妻hd中文| 国产91对白刺激露脸在线观看| 免费观看一区二区三区毛片| 精品五月天堂| 无码av中文一区二区三区桃花岛| 999日本视频| 免费毛片一区二区三区| 久久91麻豆精品一区| 欧美优质美女网站| 黑人巨大国产9丨视频| 亚洲女同志亚洲女同女播放| 国产欧美一区二区三区国产幕精品| 亚洲欧美日韩高清| 午夜dv内射一区二区| 黄色免费在线看| 成人免费观看视频| 国产福利视频一区二区| 国产精品18在线| jizz久久精品永久免费| 色妞www精品视频| ijzzijzzij亚洲大全| 视频国产在线观看| 国产中文字幕一区| 国产成人精品久久久| 成人免费视频网站入口::| 亚洲婷婷影院| 日韩情涩欧美日韩视频| 无码日韩人妻精品久久蜜桃| 香蕉久久aⅴ一区二区三区| wwww国产精品欧美| 91亚洲va在线va天堂va国| 日本一级片免费看| 欧美国产先锋| 这里只有精品丝袜| 大黑人交xxx极品hd| 精品视频在线观看免费观看| 一本大道久久a久久综合| avav在线播放| 国产在线激情| 国产精品美女久久久久久久| 久久久久久久久久久久久久久久av | 蜜臀精品一区二区| av在线天堂| 久久免费看少妇高潮| 99精品国产高清一区二区| 最近中文字幕在线观看视频| 午夜在线精品| 992tv成人免费视频| 婷婷色中文字幕| 99久久精品费精品国产风间由美| 亚洲欧洲一区二区三区久久| 日本丰满少妇裸体自慰| 成人激情自拍| 精品国产一区二区三区忘忧草 | jizz一区二区| 国产91精品入口17c| 国产精品亚洲欧美在线播放| 久久精品久久精品| 国产男女猛烈无遮挡91| 中文字幕乱伦视频| 免费观看30秒视频久久| 国产精品久久久久免费a∨| 无码人妻精品一区二区蜜桃色欲 | 国产精品无码一本二本三本色| av在线资源| 五月天欧美精品| 久久久亚洲国产精品| 国产蜜臀av在线播放| 亚洲国产精品一区二区尤物区| 无码日本精品xxxxxxxxx| 视频在线这里都是精品| 亚洲在线中文字幕| 人妻少妇精品久久| 性欧美xxx69hd高清| 欧美日韩裸体免费视频| 啊啊啊一区二区| 女生影院久久| 欧美日韩免费视频| 亚洲欧美日韩网站| 无人区乱码一区二区三区| 日韩三级视频中文字幕| 欧美无人区码suv| 精品视频日韩| 美女精品视频一区| 日韩美女一级片| 葵司免费一区二区三区四区五区| 国产精品综合网站| 国产成人精品一区二三区四区五区| 粉嫩一区二区三区在线看| 黑人中文字幕一区二区三区| 国产在线视频你懂得| 亚洲视频在线一区观看| 妺妺窝人体色777777| 超碰超碰人人人人精品| 欧美人与禽zozo性伦| 蜜桃视频无码区在线观看| 欧美a大片欧美片| 中文字幕在线国产精品| 妺妺窝人体色www婷婷| 中文日韩在线| 成人在线国产精品| 五月婷婷开心中文字幕| 国产精品三级av在线播放| 999一区二区三区| 在线国产成人影院| 精品国产乱码久久久久久夜甘婷婷| xxx在线播放| 午夜天堂精品久久久久| 国产成人精品免费视频| 亚洲精品一区二区三区区别 | 欧美日韩国产不卡在线看| 91xxx在线观看| 亚洲大片精品永久免费| 精品999在线| 久久亚洲道色| 久久色免费在线视频| 黄色片网站在线免费观看| 久久精品国产亚洲一区二区三区| 国产原创精品| av中文字幕在线观看| 色香蕉成人二区免费| 国产精品二区视频| 久久美女精品| 日韩暖暖在线视频| 色欲久久久天天天综合网| 日韩毛片精品高清免费| 欧美精品第三页| 精品三级在线观看视频| 另类美女黄大片| 成人午夜精品视频| 91免费小视频| 欧美,日韩,国产在线| 美国十次综合久久| 社区色欧美激情 | 国产伦精品一区二区三区视频我| 成人av免费观看| 91大学生片黄在线观看| av在线亚洲一区| 色av中文字幕一区| 欧美人一级淫片a免费播放| 99久久国产免费看| 国产九九九九九| 草草视频在线一区二区| 九九热99久久久国产盗摄| 在线观看国产黄| 欧美国产丝袜视频| 四季av一区二区| 精品国产乱码久久久久久果冻传媒| 国内外成人免费激情在线视频网站 | 精品日本一区二区三区| 国模雨婷捆绑高清在线| 日韩美女视频在线| 欧美精品成人久久| 国产高清亚洲一区| 91精品国产毛片武则天| 亚洲欧美日本国产| 色综合久久精品亚洲国产| 精品区在线观看| 亚洲国产乱码最新视频| 亚洲久久久久久| 中文欧美日韩| 日产精品一线二线三线芒果| 成人性片免费| 精品国产欧美一区二区五十路 | 亚洲欧美日产图| 国产在线|日韩| 中文字幕亚洲专区| 国产免费福利视频| 一区二区三区蜜桃网| 色哟哟无码精品一区二区三区| 在线播放日韩| 欧美自拍资源在线| 国产成人午夜性a一级毛片| 日韩中文字幕在线播放| 国产视频第一页| 午夜久久久影院| 成人免费av片| 久久精品理论片| 超碰成人免费在线| 免费av一区| 成人黄色网免费| h片在线观看| 在线观看日韩av| 99热这里只有精品在线观看| 亚洲成av人片| 俄罗斯毛片基地| 国产成+人+日韩+欧美+亚洲| 欧美黄网站在线观看| 欧美韩国日本在线观看| 国产精品区免费视频| 希岛爱理一区二区三区av高清| www国产精品视频| 欧美一区,二区| 欧美色手机在线观看| 久久久久无码国产精品不卡| 久久久影视传媒| 性生活一级大片| 麻豆久久婷婷| youjizz.com在线观看| 国产欧美一区二区三区精品观看| 国产日韩在线亚洲字幕中文| 国产伦子伦对白在线播放观看| 国产亚洲福利一区| 丰满人妻一区二区三区四区53| 色婷婷激情综合| 久久综合加勒比| 国产精品久久久久aaaa樱花 | 久久免费福利视频| 中文字幕在线视频区| 亚洲经典中文字幕| 国产绿帽刺激高潮对白| 色综合久久综合网97色综合| 久久国产精品二区| 国产精品久久久久久久久免费相片 | 国产精品美女久久久久久久网站| 亚洲色图欧美日韩| 国产在线视频不卡二| 国产xxxxx视频| av不卡免费看| 嫩草影院中文字幕| 国产精品毛片久久| 亚洲国产精品日韩| 你懂的一区二区三区| 国产日韩三区| 伊色综合久久之综合久久| 国产精品自产拍在线观看| 日韩高清中文字幕一区二区| 高清一区二区三区日本久| 超碰电影在线播放| 久久国产一区二区三区| 国产三区四区在线观看| 亚洲精品乱码久久久久久按摩观| www.黄色国产| 欧美一区二区三区思思人| 最近中文字幕在线观看视频| 91福利精品第一导航| 最新中文字幕一区| 黑人巨大精品欧美一区免费视频| 懂色av.com| 亚洲激情综合网| 欧美三级免费看| 亚洲精品久久久久久国产精华液| 蜜臀av午夜精品久久| 国产精品电影一区二区三区| 国产主播av在线| 国产精品免费免费| 日韩欧美在线视频播放| 国产精品视频线看| 女人裸体性做爰全过| 欧美高清在线精品一区| 91麻豆精品国产91久久综合| 欧美国产日韩一二三区| 制服 丝袜 综合 日韩 欧美| 久久久综合九色合综国产精品| 亚洲天堂成人av| 91麻豆成人久久精品二区三区| 朝桐光av一区二区三区| 99精品国产热久久91蜜凸| 亚洲中文字幕一区| 久久网站热最新地址| 黄色片在线观看免费| 国产精品欧美一区喷水| 日韩av手机在线免费观看| 亚洲乱码中文字幕| 国产精品111| 欧美午夜电影在线| 欧美性受xxx黑人xyx性爽| 欧美日本韩国一区二区三区视频| 99久久精品国产成人一区二区| 精品欧美久久久| 天堂资源最新在线| 伊人青青综合网站| 免费看a在线观看| 欧美精品免费在线| 成av人片在线观看www| 日韩av片免费在线观看| 久久女人天堂| 高清国产一区| 九九热线有精品视频99| 亚洲无玛一区| 国语精品一区| 蜜臀久久99精品久久久酒店新书| 精品亚洲aⅴ乱码一区二区三区| 性感美女一区二区三区| 91蜜桃视频在线| 91ts人妖另类精品系列| 亚洲午夜久久久久久久久电影网 | 日韩欧美一级二级三级| 四虎永久在线观看| 国产午夜精品全部视频在线播放| 国产一二区在线| 欧美一区深夜视频| 欧美综合影院| 久久精品一二三区| 外国成人免费视频| 中文字幕日本最新乱码视频| 精品在线免费观看| a视频免费观看| 中文字幕五月欧美| 亚洲欧美综合自拍| 欧美大黄免费观看| a√资源在线| 97色在线视频观看| 成人免费观看49www在线观看| 久久久久久久久一区二区| 国产精品成久久久久| 久久久噜噜噜www成人网| 成人一级黄色片| 日韩在线不卡av| 91久久免费观看| 少妇精品高潮欲妇又嫩中文字幕 | 黑鬼狂亚洲人videos| 色综合色综合色综合| 亚洲第一视频在线播放| www日韩欧美| 嫩草伊人久久精品少妇av杨幂| 国产美女99p| 在线国产一区| 久久国产精品国产精品| 久久综合久久久久88| 久久精品国产亚洲av高清色欲 | 亚洲午夜av在线| 国产免费福利视频| 色偷偷噜噜噜亚洲男人的天堂| 另类专区亚洲| 久久综合中文色婷婷| 最新亚洲视频| 折磨小男生性器羞耻的故事| 亚洲人精品午夜| 一级黄在线观看| 中文字幕亚洲一区二区三区五十路| 免费看av不卡| 玖玖玖精品中文字幕| 日韩午夜黄色| 毛茸茸free性熟hd| 亚洲一二三四久久| 国产成人精品无码高潮| 欧美另类极品videosbestfree| 巨大黑人极品videos精品| 亚欧精品在线| 美女免费视频一区二区| 我不卡一区二区| 91国产视频在线观看| 久久伊伊香蕉| 国产精品777| 日本a口亚洲| 天堂在线中文在线| 国产精品国产三级国产aⅴ原创 | 欧美不卡视频一区| 手机在线免费观看av| 超碰97在线人人| 国产精品v日韩精品v欧美精品网站 | 国产精品亚洲天堂| 国产麻豆精品在线| 麻豆视频在线观看| 精品久久久久久久久久久久包黑料 | 欧美性猛交xx| 亚洲精品乱码久久久久久久久| 性欧美18一19性猛交| 欧美激情视频三区| 欧美成人基地| 玩弄japan白嫩少妇hd| 欧美高清在线一区| 国产亲伦免费视频播放| 欧美福利小视频| 另类图片第一页| 丁香婷婷激情网| 亚洲素人一区二区| 性生交生活影碟片| 91精品国产91久久久久久| 久久91精品| 性生生活大片免费看视频| 亚洲精品成人悠悠色影视| 色婷婷激情五月| 国产成人av在线| 久久久久免费av| 亚洲制服丝袜在线播放| 欧美午夜精品久久久| 午夜小视频福利在线观看| 精品一区在线播放| 日本亚洲免费观看| 成年人av电影| 亚洲另类欧美自拍| 激情亚洲小说| 97视频久久久| 国产精品成人免费| 日本高清视频免费看| 国产精品国内视频| 欧美午夜久久| 在线观看免费小视频| 欧美成va人片在线观看| 性高爱久久久久久久久| 九九久久九九久久| 久久久久久99久久久精品网站| 国产色片在线观看| 国产精品精品视频| 欧美午夜久久| 欧美乱大交做爰xxxⅹ小说| 精品日韩欧美在线| 欧美v亚洲v综合v国产v仙踪林|