作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我希望在我的系统中有一个单例,而不是让调用者通过某种“sharedInstance”方法访问它,我希望他们能够不知道他们正在使用单例,在其他情况下话,我希望来电者能够说:
MyClass *dontKnowItsASingleton = [[MyClass alloc] init];
为了完成这个,我试过如下覆盖 alloc:
// MyClass.m
static MyClass *_sharedInstance;
+ (id)alloc {
if (!_sharedInstance) {
_sharedInstance = [super alloc];
}
return _sharedInstance;
}
我的问题是:这样可以吗?它似乎有效,但我以前从未覆盖过 alloc。另外,如果可以的话,我可以一直使用这种技术,而不是我一直在使用的 dispatch_once 方法吗? ...
+ (id)sharedInstance {
static SnappyTV *_sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedInstance = [[self alloc] init];
});
return _sharedInstance;
}
最佳答案
如@H2CO3 所述,您生成单例的方法是可以接受的,但不是线程安全的。更传统的方法是将您的分配和比较包装在 @synchronized
block 中,以便减少多线程访问,但是覆盖 +alloc
并不是实现的最佳方式一个已经摇摇欲坠的模式。
关于objective-c - 在单例上实现分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006503/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!