gpt4 book ai didi

objective-c - objective-c 中的单例

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:44 26 4
gpt4 key购买 nike

我在 objective-c 书上看到了一个单例示例。但是,我不知道 objective-c 和其他语言之间的“单例”定义的含义是否存在差异。这个 [[SingletonClass alloc] init] 仍然可以用来创建一个新对象吗?如果是,如何保证内存中只有一个对象?

#import "SingletonClass.h"

@implementation SingletonClass

static SingletonClass *sharedInstance = nil;

// Get the shared instance and create it if necessary.
+ (SingletonClass*)sharedInstance {
if (sharedInstance == nil) {
sharedInstance = [[super allocWithZone:NULL] init];
}

return sharedInstance;
}

// We can still have a regular init method, that will get called the first time the Singleton is used.
- (id)init
{
self = [super init];

if (self) {
// Work your initialising magic here as you normally would
}

return self;
}

最佳答案

如果您想要真正的单例,即只能实例化一次的对象,请查看 Apple 的文档:Creating a Singleton Instance .

基本上,思路是重写一些与分配和管理对象相关的方法:+allocWithZone(由+alloc调用),-retain,-release,-copyWithZone等,这样就变得相当困难了创建一个以上的单例类实例。 (仍然可以通过直接调用运行时来创建第二个实例,但这应该足以说明要点。)

几乎所有曾经以任何身份撰写过 Objective-C 的博主都对如何实现单例提出了意见。这些意见中有很多看起来都不错,而且大多数都非常相似。很明显Dave DeLong知道他在说什么,his piece on singletons简短、甜美、直截了当。

关于objective-c - objective-c 中的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7143162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com