一般我們看到的ios單列中並未有加@synchronized(self),然而這樣如果是多個執行緒同時來呼叫該單列,就會出現問題,建立的例項就不只是單列了,加了執行緒鎖後讓該單列始終只能返回乙個例項,即單例:假如執行緒a來呼叫shareusercontext,這句話時候,會判斷 segtoninstance == nil的情況,若沒有建立則會建立例項,然而另外的乙個執行緒b也來呼叫這句話時候,沒有執行緒鎖的情況會使其併發呼叫,即建立了兩個例項;有了執行緒鎖,讓a建立好了例項後,那麼b再來呼叫的時候就不會走進入if(segtoninstance == nil){}的括號,而直接執行 retrun segtoninstance這句,避免了重複建立例項。我認為執行緒鎖的作用在於避免併發呼叫該方法,避免建立大於1個例項。
[plain]view plain
copy
#import
@inte***ce usercontext : nsobject
//建立單例的屬性
@property(nonatomic,copy) nsstring *username;
@property(nonatomic,copy) nsstring *userinfo;
//建立單例方法
+(id)shareuser;
@end
[plain]view plain
copy
#import "usercontext.h"
static usercontext *singinstance = nil;
@implementation usercontext
@synthesize username;
@synthesize userinfo;
+ (id)shareuser
} return singinstance;
} + (id)allocwithzone:(nszone *)zone
return singinstance;
} - (id)copywithzone:(nszone *)zone
- (id)retain
- (oneway void)release
- (id)autorelease
@end
粗略的寫了個demo,乙個viewcontroller設定單例的屬性,另外乙個viewcontroller訪問單例的屬性;單例的其他用法可以度娘或者骨骼下。
單例類的使用方法
為什麼要建立單例類 有些資料在整個程式執行過程中,需要保持傳值前後資料不變.單例類特點 只初始化一次,生命週期與整個程式執行週期相同.建立方法 import inte ce singlepattern nsobject 用來儲存聯絡人資料 property nonatomic,retain nsmu...
iOS中的單例
單例模式用於當乙個類只能有乙個例項的時候,通常情況下這個 單例 代表的是某乙個物理裝置比如印表機,或是某種不可以有多個例項同時存在的虛擬資源或是系統屬性比如乙個程式的某個引擎或是資料。用單例模式加以控制是非常有必要的。單例模式需要達到的目的 1.封裝乙個共享的資源 2.提供乙個固定的例項建立方法 3...
IOS中delegate的使用方法
寫了乙個簡單的委託的試用測試 首先建立functiontest類,宣告委託 functiontest.h functiontest.h delegatedemo created by shx on 12 7 17.import protocol functiontestdelegate inte c...