在開發IOS時,我們經常會使用到單例,比如 UIApplication 和 NSFileManager 。那麼如何創建一個單例呢。
在這裏我僅寫出當前所知道的最簡單的實現方法。當然還有別的方法可以實現單例,在這我就不列舉了。
使用objective-c的寫法(利用gcd)
// Singleton.h
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
+(instancetype) sharedInstance;
@end
// Singleton.m
#import "Singleton.h"
@implementation Singleton
static Singleton sharedInstance = nil;
+(instancetype) sharedInstance {
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
};
return sharedInstance;
}
@end
使用swift的寫法
在swift 1.2版本中,類中終於可以聲明static變量了。所以實現單例的方法非常簡單,但需要注意的是,必需將類的構造函數聲明爲private,避免其他對象利用單例類的init()函數來創造出單例的其它實體。
// singleton.swift
import Cocoa
class Singleton {
static let sharedInstance = Singleton()
private init() {
print("init")
}
}
這裏推薦一篇很全面的關於創建單例的文章
http://my.oschina.net/jeans/blog/541750
英文原文
http://krakendev.io/blog/the-right-way-to-write-a-singleton?utm_content=buffer0072d&utm_medium=social&utm_source=linkedin.com&utm_campaign=buffer