【发布时间】:2016-06-08 19:41:46
【问题描述】:
在 Objective-C 中,这对 Singleton in Interface Builder 很有效
static Universe *instance;
+ (Universe *)instance {
return instance;
}
+ (id)hiddenAlloc {
return [super alloc];
}
+ (id)alloc {
return [self instance];
}
+ (void)initialize {
static BOOL initialized = NO;
if (!initialized) {
initialized = YES;
instance = [[Universe hiddenAlloc] init];
}
}
并且由于alloc被覆盖,IB会选择Universe的唯一实例
这在 Swift 中可行吗? [我的解决方案是here on Github。]
【问题讨论】:
-
不,因为在 Swift 中没有
alloc这样的东西。你正在修改基本的内存管理,而 Swift 不会让你这样做。如果这对你很重要,为什么不用 Objective-C 编写这部分代码呢? -
@matt 谢谢你,同意了。我试图想象一个混合体,其中单例在 Objective-C 中,然后
Universe是一个 Swift 子类。在我看来这是不可能的,因为initialize必须与特定的类相关联,对吧? -
不,可以为子类调用
initialize。这就是为什么一个好的initialize总是检查这实际上是什么类。 -
这可能很有趣,我会看看我的想法,谢谢!
-
嗨@matt 我在下面发布了一个答案。它接近工作,但不知何故丢失了
IBOutlet变量(尽管它的哈希值和内存地址保持不变)。欢迎任何建议、提示、指导(或劝阻,如果这是必要的话)。谢谢!