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

談一談iOS單例模式

 更新時間:2016年05月11日 16:46:13   作者:彭盛凇  
這篇文章主要和大家談一談iOS中的單例模式,單例模式是一種常用的軟件設計模式,想要深入了解iOS單例模式的朋友可以參考一下

單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個類的對象只能存在一個,單例模式是最好的解決方案。

1、書寫步驟

1)、創(chuàng)建類方法,返回對象實例.以shared  default current開頭。
2)、創(chuàng)建一個全局變量用來保存對象的引用
3)、判斷對象是否存在,若不存在,創(chuàng)建對象

2、具體單例模式的幾種模式

第一種單例模式

//非線程安全寫法

static UserHelper * helper = nil;

+ (UserHelper *)sharedUserHelper {

if (helper == nil) {

helper = [[UserHelper alloc] init];

}

 return helper;

}

第二種單例模式

//線程安全寫法1

static UserHelper * helper = nil;

+ (UserHelper *)sharedUserHelper {

 @synchronized(self) {

  

  if (helper == nil) {

   helper = [[UserHelper alloc] init];

  }

 }

 return helper;

}

第三種單例模式    

+ (void)initialize {

 

 if ([self class] == [UserHelper class]) {

  helper = [[UserHelper alloc] init];

 }

}

第四種單例模式

//線程安全寫法3(蘋果推薦,主要用這個)

static UserHelper * helper = nil;

+ (UserHelper *)sharedUserHelper {

 

static dispatch_once_t onceToken;

 dispatch_once(&onceToken, ^{

  helper = [[UserHelper alloc] init];

 });

 

 return helper;

}

MRC全面實現(xiàn)單例寫法(了解)

#import <Foundation/Foundation.h>

#import "UserHelper.h"

 

void func() {

 

 static dispatch_once_t onceToken;

 dispatch_once(&onceToken, ^{

 NSLog(@"haha");

 });

}

 

int main(int argc, const char * argv[]) {

 @autoreleasepool {

 

// [UserHelper logout];

 

 if ([UserHelper isLogin]) {

  

  UserHelper * helper = [UserHelper sharedUserHelper];

  NSLog(@"username = %@ password = %@",helper.userName,helper.password);

  

 } else {

  

  char name[20];

  char pwd[20];

  NSLog(@"請輸入用戶名");

  scanf("%s",name);

  NSLog(@"請輸入密碼");

  scanf("%s",pwd);

  

  NSString * userName = [[NSString alloc] initWithUTF8String:name];

  NSString * password = [[NSString alloc] initWithUTF8String:pwd];

  

  if (userName && password) {

  

  [UserHelper loginWithUserName:userName password:password];

  

  UserHelper * helper = [UserHelper sharedUserHelper];

  NSLog(@"username = %@ password = %@",helper.userName,helper.password);

  

  }

 }

 

// UserHelper * help1 = [UserHelper sharedUserHelper];

// help1.userName = @"dahuan";

// help1.password = @"123456";

// NSLog(@"%p",help1);

// NSLog(@"%@",help1.userName);

// NSLog(@"%@",help1.password);

//

// 

// UserHelper * help2 = [UserHelper sharedUserHelper];

// help2.password = @"zxc";

// NSLog(@"%p",help2);

// NSLog(@"%@",help1.userName);

// NSLog(@"%@",help1.password);

 

 }

 return 0;

}

 //class.h

#import <Foundation/Foundation.h>

 

@interface UserHelper : NSObject

 

//1、創(chuàng)建類方法,返回對象實例 shared default current

 

+ (UserHelper *)sharedUserHelper;

 

@property (nonatomic, copy) NSString * userName;

 

@property (nonatomic, copy) NSString * password;

 

+ (BOOL)isLogin;

 

+ (void)loginWithUserName:(NSString *)userName password:(NSString *)password;

 

+ (void)logout;

 

@end

 

// class.m

#import "UserHelper.h"

 

//2、創(chuàng)建一個全局變量

 

#define Path @"/Users/dahuan/Desktop/data"

 

static UserHelper * helper = nil;

 

@implementation UserHelper

 

//+ (void)initialize {

// 

// if ([self class] == [UserHelper class]) {

// helper = [[UserHelper alloc] init];

// }

//}

 

+ (UserHelper *)sharedUserHelper {

 

 //3、判斷對象是否存在,若不存在,創(chuàng)建對象

 //線程安全

// @synchronized(self) {

// 

// if (helper == nil) {

//  helper = [[UserHelper alloc] init];

// }

// }

 

 //gcd 線程安全

 static dispatch_once_t onceToken;

 dispatch_once(&onceToken, ^{

 helper = [[UserHelper alloc] init];

 });

 

 return helper;

}

 

- (instancetype)init {

 

 if (self = [super init]) {

 

 NSString * data = [NSString stringWithContentsOfFile:Path encoding:NSUTF8StringEncoding error:nil];

 if (data) {

  NSArray * array = [data componentsSeparatedByString:@"-"];

  _userName = array[0];

  _password = array[1];

 }

 }

 return self;

}

 

+ (BOOL)isLogin {

 

 UserHelper * helper = [UserHelper sharedUserHelper];

 if (helper.userName && helper.password) {

 return YES;

 }

 return NO;

}

 

+ (void)loginWithUserName:(NSString *)userName password:(NSString *)password {

 

 UserHelper * helper = [UserHelper sharedUserHelper];

 helper.userName = userName;

 helper.password = password;

 

 NSArray * array = @[userName,password];

 NSString * data = [array componentsJoinedByString:@"-"];

 [data writeToFile:Path atomically:YES encoding:NSUTF8StringEncoding error:nil];

}

 

+ (void)logout {

 

 NSFileManager * fm = [NSFileManager defaultManager];

 

 if ([fm fileExistsAtPath:Path]) {

 [fm removeItemAtPath:Path error:nil];

 }

}

 

@end

以上就是關于iOS單例模式的全部內容,希望對大家的學習有所幫助。

相關文章

  • 簡單掌握iOS應用開發(fā)中sandbox沙盒的使用

    簡單掌握iOS應用開發(fā)中sandbox沙盒的使用

    這篇文章主要介紹了iOS應用開發(fā)中sandbox沙盒的使用,即將應用的存儲區(qū)域單獨隔離開來,開發(fā)時經(jīng)??梢杂玫?需要的朋友可以參考下
    2016-01-01
  • iOS開發(fā)教程之常見的性能優(yōu)化技巧

    iOS開發(fā)教程之常見的性能優(yōu)化技巧

    這篇文章主要給大家介紹了關于iOS開發(fā)教程之常見的性能優(yōu)化技巧,文中通過示例代碼介紹的非常詳細,對大家學習或者使用iOS具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • iOS布局渲染之UIView方法的調用時機詳解

    iOS布局渲染之UIView方法的調用時機詳解

    在你剛開始開發(fā) iOS 應用時,最難避免或者是調試的就是和布局相關的問題,下面這篇文章主要給大家介紹了關于iOS布局渲染之UIView方法調用時機的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-07-07
  • iOS UICollectionView實現(xiàn)卡片效果

    iOS UICollectionView實現(xiàn)卡片效果

    這篇文章主要為大家詳細介紹了iOS UICollectionView實現(xiàn)卡片效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • iOS中UITextField實現(xiàn)過濾選中狀態(tài)拼音的代碼

    iOS中UITextField實現(xiàn)過濾選中狀態(tài)拼音的代碼

    這篇文章主要介紹了iOS中UITextField實現(xiàn)過濾選中狀態(tài)拼音的代碼,需要的朋友可以參考下
    2018-01-01
  • Xcode清理緩存和垃圾文件的教程

    Xcode清理緩存和垃圾文件的教程

    下面小編就為大家分享一篇Xcode清理緩存和垃圾文件的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 解決ios端點擊按鈕閃爍問題(小tips)

    解決ios端點擊按鈕閃爍問題(小tips)

    這篇文章主要介紹了ios端點擊按鈕閃爍的解決方法(小tips),需要的朋友參考下吧
    2017-10-10
  • 總結iOS實現(xiàn)漸變顏色的三種方法

    總結iOS實現(xiàn)漸變顏色的三種方法

    這篇文章主要給大家總結了iOS實現(xiàn)漸變顏色的三種方法,分別是利用CAGradientLayer實現(xiàn)漸變、Core Graphics相關方法實現(xiàn)漸變以及用CAShapeLayer作為layer的mask屬性實現(xiàn),大家可以根據(jù)自己的需要選擇使用,下面來一起看看吧。
    2016-10-10
  • iOS UIScrollView和控制器返回手勢沖突解決方法

    iOS UIScrollView和控制器返回手勢沖突解決方法

    這篇文章主要介紹了iOS UIScrollView和控制器返回手勢沖突解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • iOS 導航欄無縫圓滑的隱藏 Navigationbar實例代碼

    iOS 導航欄無縫圓滑的隱藏 Navigationbar實例代碼

    本文通過實例代碼給大家介紹了iOS 導航欄無縫圓滑的隱藏 Navigationbar的效果,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11

最新評論

和政县| 滨州市| 格尔木市| 荥阳市| 夹江县| 武平县| 迁安市| 禹城市| 望江县| 甘肃省| 留坝县| 海淀区| 柳江县| 广河县| 壤塘县| 新兴县| 抚州市| 睢宁县| 共和县| 临沧市| 台江县| 西安市| 长葛市| 静宁县| 达日县| 衡水市| 汉源县| 武鸣县| 平乡县| 丰镇市| 九江市| 鱼台县| 万载县| 汾阳市| 会昌县| 保靖县| 永定县| 丁青县| 永年县| 邹城市| 通州区|