//
// main.m
// instancetypeTest
//
// Created by chenqy on 2016/12/2.
// Copyright © 2016年 chenqy. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
+(instancetype) shareInstance ;
@end
@implementation Singleton
static Singleton* _instance = nil;
+(instancetype) shareInstance
{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_instance = [[super allocWithZone:NULL] init] ;
}) ;
return _instance ;
}
+(id) allocWithZone:(struct _NSZone *)zone
{
return [Singleton shareInstance] ;
}
-(id) copyWithZone:(struct _NSZone *)zone
{
return [Singleton shareInstance] ;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Singleton* obj1 = [Singleton shareInstance] ;
NSLog(@"obj1 = %@.", obj1) ;
Singleton* obj2 = [Singleton shareInstance] ;
NSLog(@"obj2 = %@.", obj2) ;
Singleton* obj3 = [[Singleton alloc] init] ;
NSLog(@"obj3 = %@.", obj3) ;
Singleton* obj4 = [[Singleton alloc] init] ;
NSLog(@"obj4 = %@.", obj4) ;
}
return 0;
}
结果:
2016-12-02 14:27:45.326872 instancetypeTest[937:50884] Hello, World!
2016-12-02 14:27:45.327937 instancetypeTest[937:50884] obj1 = <Singleton: 0x1002000c0>.
2016-12-02 14:27:45.328104 instancetypeTest[937:50884] obj2 = <Singleton: 0x1002000c0>.
2016-12-02 14:27:45.328247 instancetypeTest[937:50884] obj3 = <Singleton: 0x1002000c0>.
2016-12-02 14:27:45.328294 instancetypeTest[937:50884] obj4 = <Singleton: 0x1002000c0>.
Program ended with exit code: 0