OC创建一个单例

Tools.h

#import <Foundation/Foundation.h>

@interface Tools : NSObject
+ (instancetype)shareInstance;
@end

Tools.m

#import "Tools.h"

@implementation Tools

static Tools *_instance;

+(instancetype)shareInstance
{
    Tools *instance = [[self alloc] init];
    return instance;
}

+(instancetype)allocWithZone:(struct _NSZone *)zone
{
    NSLog(@"%s", __func__);
    if (_instance == nil) {
        NSLog(@"创建了一个对象");
        _instance = [[super allocWithZone:zone] init];
    }
    return _instance;
}
@end

main.m

#import <Foundation/Foundation.h>
#import "Tools.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Tools *t1 = [[Tools alloc] init];
        Tools *t2 = [Tools new];
        Tools *t3 = [Tools shareInstance];
        
        NSLog(@"t1 %p", t1);
        NSLog(@"t2 %p", t2);
        NSLog(@"t3 %p", t3);
    }
    return 0;
}

输出

2018-08-12 23:35:40.350941+0800 单利[36072:1037763] +[Tools allocWithZone:]
2018-08-12 23:35:40.351266+0800 单利[36072:1037763] 创建了一个对象
2018-08-12 23:35:40.351309+0800 单利[36072:1037763] +[Tools allocWithZone:]
2018-08-12 23:35:40.351327+0800 单利[36072:1037763] +[Tools allocWithZone:]
2018-08-12 23:35:40.351343+0800 单利[36072:1037763] t1 0x103009a30
2018-08-12 23:35:40.351356+0800 单利[36072:1037763] t2 0x103009a30
2018-08-12 23:35:40.351367+0800 单利[36072:1037763] t3 0x103009a30