iOS常用設計模式之單例模式

來源:互聯網
上載者:User

標籤:

        單例模式是iOS設計模式中常用的一種設計模式,它的意圖是保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。單例模式的作用就是為瞭解決“應用中只有一個執行個體”這一類問題。

        單例模式一般會封裝一個靜態屬性,並提供靜態執行個體的建立方法。下面上代碼:

////  Singleton.h//  DesignPatternsDemo////  Created by 韓學鵬 on 15/6/19.//  Copyright (c) 2015年 韓學鵬. All rights reserved.//#import @interface Singleton : NSObject+ (Singleton *)shareManager;@end
////  Singleton.m//  DesignPatternsDemo////  Created by 韓學鵬 on 15/6/19.//  Copyright (c) 2015年 韓學鵬. All rights reserved.//#import "Singleton.h"@implementation Singletonstatic Singleton *_shareManager = nil;+ (Singleton *)shareManager {    static dispatch_once_t once;    dispatch_once(&once, ^{        _shareManager = [[self alloc] init];    });        return _shareManager;}@end

        如果使用者能嚴格按照要求來使用給定的方法,這個單例還是可以的,但是,如果不小心調用了其他可以產生對象的方法,那這個單例就失去了它的作用。所以,這個單例還需要改造:

        1、重寫allocWithZone方法,保證使用者在調用alloc或者init的時候不會產生新的對象。

        2、重寫copyWithZone和mutableCopyWithZone方法,保證使用者在進行對象複製的時候不會產生新的對象。

        3、看情況重寫retain、retainCount、release和autorelease方法。(ARC模式下需要注釋掉)

        重新改造的單例如下:

////  Singleton.m//  DesignPatternsDemo////  Created by 韓學鵬 on 15/6/19.//  Copyright (c) 2015年 韓學鵬. All rights reserved.//#import "Singleton.h"@implementation Singletonstatic Singleton *_shareManager = nil;+ (Singleton *)shareManager {    static dispatch_once_t once;    dispatch_once(&once, ^{        _shareManager = [[self alloc] init];    });    return _shareManager;}+ (id)allocWithZone:(struct _NSZone *)zone {    static dispatch_once_t once;    dispatch_once(&once, ^{        _shareManager = [super allocWithZone:zone];    });        return _shareManager;}- (id)copyWithZone:(NSZone *)zone {    return _shareManager;}- (id)mutableCopyWithZone:(NSZone *)zone {    return [self copyWithZone:zone];}/*   ARC無效時- (id)retain {    return _shareManager;}- (NSUInteger)retainCount {    return 1;}- (oneway void)release {    }- (id)autorelease {    return _shareManager;}*/@end

測試代碼和輸入輸出結果:

    id obj = [Singleton new];    id obj1 = [Singleton shareManager];    id obj2 = [[Singleton alloc] init];        NSLog(@"obj:%@", obj);    NSLog(@"obj1:%@", obj1);    NSLog(@"obj2:%@", obj2);

        輸出:

2015-06-19 19:15:27.452 DesignPatternsDemo[24125:607] obj:2015-06-19 19:15:27.453 DesignPatternsDemo[24125:607] obj1:2015-06-19 19:15:27.453 DesignPatternsDemo[24125:607] obj2:

附上這個類的:單例

iOS常用設計模式之單例模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.