單例模式
Singleton.h
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
+ (Singleton *)sharedInstance;
- (void)print;
@end
Singleton.m
#import "Singleton.h"
@implementation Singleton
+ (Singleton *)sharedInstance {
static Singleton *_sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedInstance = [[self alloc] init];
});
return _sharedInstance;
}
- (void)print{
NSLog(@"The Singleton Pattern");
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Singleton.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
[[Singleton sharedInstance] print];
}
return 0;
}
注意:因?yàn)镺bjective-C的方法并沒有private和public的概念登淘,在任何時(shí)間任何對(duì)象之間消息都能被傳遞谬哀。因此上面的例子Singleton對(duì)象仍然能用init方法創(chuàng)建黍析。
如果一定要使得init方法失效节沦,來至http://stackoverflow.com/questions/195078/is-it-possible-to-make-the-init-method-private-in-objective-c 的解答方案键思。