十八,iOS設計模式之單例模式

2021-07-27 10:24:49 字數 1559 閱讀 1257

單例模式

單例模式在專案中用的比較多主要用於資料的儲存和使用;

單例設計模式有兩種寫法,第一種是不考慮執行緒安全的懶漢模式,第二種是考慮執行緒安全的「餓漢模式」,餓漢模式相對於懶漢模式來說是考慮執行緒安全,懶漢模式是典型的時間換空間,也就是每次獲取例項都會進行判斷,看是否需要建立例項,浪費判斷的時間。

餓漢模式:當類載入到oc執行時環境中(記憶體),就會呼叫+ (void)load一次(乙個類只會載入1次)

懶漢模式:每呼叫一次就會載入;

ios4之後專案中使用餓漢模式較多

專案中常用到主要有五種型別的資料 nsnumber,nsmutabledictionary,nsstring,bool,nsinteger

#define use_info [singleton shareinstance]

#import

@inte***ce singleton : nsobject

@property (atomic, strong) nsnumber *logined;

@property (atomic) nsinteger timeout;

@property (nonatomic, retain) nsmutabledictionary *useritems;

@property (atomic, assign) bool isele;

@property (nonatomic, strong) nsstring *username;

//單例例項化

+ (instancetype)shareinstance;

@end

#import "singleton.h"

static singleton *bankuser = nil;

@implementation singleton

#pragma mark - init with singleton

//餓漢模式

//+ (instancetype)shareinstance

//);

//    

//    return bankuser;

//}/*懶漢模式*/

+ (instancetype)shareinstance

}return bankuser;

}@end

呼叫取值如下:

use_info.username = @"ssdddf";

use_info.logined = @1;

[use_info.useritems setobject:@"usernumber" forkey:@"usernumber"];

use_info.isele = yes;

use_info.timeout = 1;

nslog(@"username==%@ logined==%@useritems==%@isele=%dtimeout==%ld",use_info.username,use_info.logined,[use_info.useritems objectforkey:@"usernumber"],!use_info.isele,(long)use_info.timeout);

iOS設計模式之單例模式

單例模式 總是返回自己的同乙個例項,它提供了對類的物件所提供的資源的全域性訪問點,並且返回的例項只能被例項化一次.單例設計模式設計需要考慮的兩個問題 1 發起呼叫的物件不能以其他分配方式例項化單例物件,否則,就有可能建立單例類的多個例項 2 對單例物件例項化的限制應該與引用計數記憶體模型共存.sin...

iOS設計模式之單例模式

原則上,單例是在程式生命週期裡只被例項化過一次的 類。為了確保這一點,我們利用類的乙個靜態方法來生成和訪問物件。因此,你是通過以便利方法來訪問某個類的單例物件的,而不是用 alloc init或者靜態autorelease初始化方法。在很多時候,我們使用乙個某個類的唯一例項。最常見的就是乙個程式的主...

iOS設計模式之單例模式

單例模式是ios常用設計模式中的一種。單例設計模式的作用是使得這個類的乙個物件成為系統中的唯一例項,因此需要用一種唯一的方法去建立這個物件並返回這個物件的位址。那麼,我們何時使用單例模式呢?1 類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其訪問。2 這個唯一的例項只能通過子類化進行擴充套件,而...