MST
星途 面试题库

面试题:Objective-C中如何实现基础的单例模式

请用Objective-C代码实现一个基础的单例模式,并简要说明这种实现方式的优缺点。
26.0万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

单例模式实现代码

#import <Foundation/Foundation.h>

@interface Singleton : NSObject

+ (instancetype)sharedInstance;

@end

@implementation Singleton

static Singleton *sharedSingleton = nil;

+ (instancetype)sharedInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedSingleton = [[self alloc] init];
    });
    return sharedSingleton;
}

// 防止通过alloc和new创建新实例
- (instancetype)allocWithZone:(NSZone *)zone {
    return [self sharedInstance];
}

// 防止通过copy创建新实例
- (id)copyWithZone:(NSZone *)zone {
    return self;
}

// 防止通过mutableCopy创建新实例
- (id)mutableCopyWithZone:(NSZone *)zone {
    return self;
}

@end

优点

  1. 全局唯一实例:确保在整个应用程序中只有一个实例存在,方便管理共享资源,如数据库连接、文件管理器等。
  2. 节省资源:避免频繁创建和销毁实例,减少内存开销,提高性能。
  3. 易于访问:通过类方法sharedInstance可以方便地获取实例,在整个应用程序中任何地方都能轻松访问。

缺点

  1. 全局状态:单例模式可能导致全局状态的存在,使得代码的可测试性变差,因为不同的测试可能会相互影响。
  2. 内存管理:单例对象在应用程序生命周期内一直存在,如果单例对象持有大量资源,可能会导致内存占用过高。
  3. 并发问题:在多线程环境下,如果实现不当,可能会出现线程安全问题,虽然通过dispatch_once可以解决此问题,但如果使用其他实现方式则需要额外注意。