天天看點

Objective-C:單例模式

objecitive C的單例模式:

#import <Foundation/Foundation.h>

@class SingleInstance;

static SingleInstance *instance = nil;

@interface SingleInstance : NSObject

+ (instancetype)sharedInstance;

@end

@interface SingleInstance ()

@property(strong, nonatomic) NSString *name;

@end

@implementation SingleInstance

+ (instancetype)sharedInstance; {
    static dispatch_once_t once_predicate;
    dispatch_once(&once_predicate, ^{
        instance = [[super allocWithZone:nil]init];
    });
    return instance;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    return [SingleInstance sharedInstance];
}

- (instancetype)init {
    if (self = [super init]) {
        _name = @"SingleInstance";
    }
    return self;
}

@end
           

測試代碼:

SingleInstance *s1 = [SingleInstance sharedInstance];
    
        SingleInstance *s2 = [[SingleInstance alloc] init];
        
        NSLog(@"s1 address:%p, \ns2 address:%p", s1, s2);