MST

星途 面试题库

面试题:Objective-C在iOS开发中如何实现单例模式

请用Objective-C代码实现一个线程安全的单例模式,并解释其中关键代码的作用。
25.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

实现代码

#import <Foundation/Foundation.h>

@interface Singleton : NSObject

@property (nonatomic, strong, readonly) NSString *data;

+ (instancetype)sharedInstance;

@end

@implementation Singleton

static Singleton *sharedSingleton = nil;
static dispatch_once_t onceToken;

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

- (instancetype)init {
    self = [super init];
    if (self) {
        _data = @"Initial data";
    }
    return self;
}

@end

关键代码解释

  1. static Singleton *sharedSingleton = nil;:定义一个静态变量 sharedSingleton 用于存储单例实例,初始化为 nil
  2. static dispatch_once_t onceToken;:定义一个 dispatch_once_t 类型的静态变量 onceToken,用于 dispatch_once 函数确保代码块只执行一次。
  3. dispatch_once(&onceToken, ^{ sharedSingleton = [[self alloc] init]; });dispatch_once 是GCD(Grand Central Dispatch)提供的函数,它会保证传入的代码块只被执行一次,无论有多少线程同时调用 sharedInstance 方法。在这个代码块中,创建了单例的实例 sharedSingleton。这种方式利用了GCD内部的线程同步机制,从而实现了线程安全的单例模式。