iOS 開發中單例的簡單使用

單例模式

1:什么是單例模式

單例模式是一種常見的設計模式,對于單例對象的類,必須要保證在任意時刻下只有一個對象存在,而且自行實例化該對象,并向整個系統提供這個對象。也就是說對于一個單例類無論實例化對象多少次都只有一個實例對象存在,并且這個對象是全局的,能夠被整個系統訪問到。
單例對象和c中的全局變量很相似。c中的全局變量可以實現在不同函數之間的數據共享,單例對象可以實現在不同對象之間的數據共享

2:單例對象的創建方式
一般類方式,并且shared/default/current開頭
3:單例模式的應用
   1.在不同對象之間數據共享
   2.當創建一個類的時候需要耗費很大的性能時,這時候可以把這個類設計成單例類

這樣有什么優點呢?

1.在內存中只有一個對象,節省內存空間。 
2.避免頻繁的創建銷毀對象,可以提高性能。
3.避免對共享資源的多重占用。
4.可以全局訪問。
4.單例的創建方法

1.第一種,在創建一個對象時先判斷在程序中有沒有創建過這個對象。
.h中

#import <Foundation/Foundation.h>

@interface SingleClass : NSObject
+(instancetype)sharedUtils;
@property (nonatomic,copy) NSString *name;
@end

.m中

#import "SingleClass.h"
@implementation SingleClass

static SingleClass *DefaultManager = nil;
+(instancetype)sharedUtils
{
    if (!DefaultManager)
        DefaultManager = [[self allocWithZone:NULL] init];
    
    return DefaultManager;
}

2.直接利用系統提供的多線程技術dispatch_once
.h中

#import <Foundation/Foundation.h>
@interface SingleClass : NSObject
+ (SingleClass *)sharedSingleClass;//創建單例對象的方法

@property (nonatomic,copy) NSString *name;
@end

.m中

#import "SingleClass.h"

@implementation SingleClass

//1:創建一個靜態的全局單例對象并且初始化為nil
static SingleClass *single = nil;
+ (SingleClass *)sharedSingleClass{
    //2:調用GCD的once方法
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{//block//保證{}里面的代碼在整個程序運行期間只被執行一次
        //3:對象單例對象進行實例化
        single = [[SingleClass alloc] init];
    });
    return single;//第一次調用該方法的時候返回實例化后的對象//從第二次開始返回的都是第一次實例化的對象
}
5.調用方法

如果需要在哪里賦值的話,可以引入頭文件并進行初始化。

SingleClass *singleClass = [SingleClass sharedUtils];
singleClass.name = @"哈哈";

調用

SingleClass *singleClass = [SingleClass sharedUtils];
 NSLog(@"打印單例數值---%@",singleClass.name);

結果打印:


打印的結果.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,914評論 18 139
  • 單例模式(SingletonPattern)一般被認為是最簡單、最易理解的設計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,292評論 4 34
  • 在iOS中有很多的設計模式,有一本書《Elements of Reusable Object-Oriented S...
    鄭明明閱讀 2,459評論 3 26
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,209評論 30 471
  • 2005年初,我坐在烏魯木齊的家里,父母怕我想不開,每天陪我說話解悶,其實我還好,我回家這半個月之所以坐著發呆是因...
    博愛社閱讀 230評論 4 2