iOS面試題之單利

 

寫一個線程安全的單利

如下寫法:

@implementation DFManager

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

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

- (id)copyWithZone:(NSZone *)zone{
    return self;
}

- (id)mutableCopyWithZone:(NSZone *)zone{
    return self;
}

@end

以上:

    DFManager *manager = [DFManager sharedInstance];
    NSLog(@"obj1 = %@", manager);
    
    DFManager *manager1 = [[DFManager alloc] init];
    NSLog(@"obj1 = %@", manager1);
    
    DFManager *manager2 = [manager1 copy];
    NSLog(@"obj1 = %@", manager2);

結果:內存地址是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章