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

來源:互聯網
上載者:User

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

 

  單例模式的意思就是這個類只有一個執行個體,這個類就是單例類。在iOS中有不少都是單例NSNull,NSFileManager ,UIApplication,NSUserDefaults ,UIDevice,還有一些第三方也有能用到了這種設計模式例如Afhttpmanger。。。

(1)單例模式的作用 :可以保證在程式運行過程,一個類只有一個執行個體,而且該執行個體易於供外界訪問,從而方便地控制了執行個體個數,並節約系統資源。

(2)單例模式的使用場合:在整個應用程式中,共用一份資源(這份資源只需要建立初始化1次),應該讓這個類建立出來的對象永遠只有一個。 

實現思路:

////  AudioPlayer.m//  單例////  Created by 兩好三壞 on 16/2/21.//  Copyright © 2016年 ;. All rights reserved.//#import "AudioPlayer.h"@interface AudioPlayer ()<NSCopying>@end@implementation AudioPlayer//建立一個一個全域的static的執行個體   static id _instance;static id _instance;//提供1個類方法讓外界訪問唯一的執行個體+(instancetype)shareAudioPlayer{        static dispatch_once_t onceToken;        dispatch_once(&onceToken, ^{            _instance = [[self alloc] init];    });        return _instance;}//重寫allocWithzone:方法,控制記憶體配置。因為alloc內部會調用該方法,每次調用allocWithzone:方法,系統都會建立一塊新的記憶體空間。+(instancetype)allocWithZone:(struct _NSZone *)zone{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        _instance = [super allocWithZone:zone];    });    return _instance;}//實現copyWithZone:方法-(id)copyWithZone:(NSZone *)zone{    return _instance;}@end

在控制其中建立單例類的對象,列印地址:

- (void)viewDidLoad {    [super viewDidLoad];        AudioPlayer *player1 = [AudioPlayer shareAudioPlayer];        AudioPlayer *player2 = [[AudioPlayer alloc] init];            AudioPlayer *player3 = [AudioPlayer new];            AudioPlayer *player4 = [player1 copy];        NSLog(@"%p,%p,%p,%p",player1,player2,player3,player4);    }//列印結果2016-02-21 23:27:13.990 單例[2847:329685] 0x7fb6e3e080a0,0x7fb6e3e080a0,0x7fb6e3e080a0,0x7fb6e3e080a0

  四個執行個體的記憶體位址是一樣的,證明只建立了一個執行個體;

 

MRC環境下通常需要在實現下面幾個方法:

- (oneway void)release {}- (id)retain { return _instance; }- (id)autorelease { return _instance; }- (NSUInteger)retainCount { return UINT_MAX; }

  可以使用宏判斷是否為mrc,

#if __has_feature(objc_arc) // ARC #else // MRC #endif

  

當然還可以把單例也抽取成為宏,用起來還挺方便的;你們也可以試試試~~~ 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.