單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。
目前具有執行緒安全的兩種單例寫法:
第一種:
#import "myperson.h"
@inte***ce myperson ()@end
@implementation myperson
static myperson *person = nil;
+(instancetype)shareperson);
return person;
}
第二種:
#import "animal.h"
@implementation animal
+(instancetype)shareanimal
}return dog;
}@end
上面兩種方法都能實現單例的操作,但是否嚴謹呢?我們來試試。
myperson *per1 = [myperson shareperson];
myperson *per2 = [[myperson alloc]init];
myperson *per3 = [myperson new];
myperson *per4 = [myperson shareperson];
myperson *per5 = [myperson shareperson];
nslog(@"per1=%@\nper2=%@\nper3=%@\nper4=%@\nper5=%@",per1,per2,per3,per4,per5);
看看列印結果:
per1=per2=per3=per4=per5=
可以看見,用上面兩種方法寫單例,如果只是使用share..方法,則滿足單例的要求,只能例項乙個物件。可若是使用其它方法(alloc/init,new)建立單例物件,則不能滿足需要。
嚴謹的單例實現方法:需新增另外兩個方法,
#import "myperson.h"
@inte***ce myperson ()@end
@implementation myperson
static myperson *person = nil;
+(instancetype)shareperson);
return person;
}+(instancetype)allocwithzone:(struct _nszone *)zone);
return person;
}-(id)copywithzone:(nszone *)zone
iOS開發 單例設計模式
一 什麼是單例 單例 在記憶體中只有唯一的例項,並且提供乙個全域性的訪問方法!單例的好處 可以實現同乙份資源共享。二 單例設計 非全部封死,提供兩個建立物件的方式 1 可以選擇使用類方法,直接建立乙個單例物件 2 也可以選擇使用其他方式,如alloc init方式,建立非單例物件 在單例類的.m檔案...
IOS開發 單例模式安全寫法
一般情況我們都是這麼寫 static mysingleton sharesingleton instancetype sharedsingleton static dispatch once oncetoken dispatch once oncetoken,sharesingleton mysin...
iOS開發之單例模式
單例模式是一種常用的軟體設計模式,在應用這個模式時,單例物件的類必須保證只有乙個例項存在。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。單例的實現步驟 1 重寫alloc...