Singleton confusion in Objective-C
考虑这样的代码:
1 2 3 4 5 6 7 8 9 | +(id)sharedInstance { static dispatch_once_t pred; static MyClass *sharedInstance = nil; dispatch_once(&pred, ^{ sharedInstance = [[MyClass alloc] init]; }); return sharedInstance; } |
如果我跟这个singleton设计模式,我可以做以下假设:
- 配置和初始化只会被执行一次谢谢!到最大公约数。
- 在sharedinstance变量只能访问类是从在本实施和共享的类的实例,无论。
在我第一次创建这样的事情:我会的。
1 | MyClass *something = [MyClass sharedInstance]; |
我的问题是,如果我调用的代码,但像这样:预览?
1 | MyClass *somethingOther = [MyClass sharedInstance]; |
我只能想到一个结局。
结果:
1 | static MyClass *sharedInstance = nil; |
让sharedinstance变点零级和一somethingother无操作系统将返回零。
但我想说,什么是应该发生的,是在单件,而共享的实例将被返回。
现在考虑这样的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | + (MotionManagerSingleton*)sharedInstance { static MotionManagerSingleton *_sharedInstance; if(!_sharedInstance) { static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ _sharedInstance = [[super allocWithZone:nil] init]; }); } return _sharedInstance; } + (id)allocWithZone:(NSZone *)zone { return [self sharedInstance]; } - (id)copyWithZone:(NSZone *)zone { return self; } |
这里的the
1 | static MotionManagerSingleton *_sharedInstance; |
我doesnt集变到零,但我认为,所有的对象都是零分,initialized到默认。
我的问题是,怎么是这类方法返回的"sharedinstance"?
好的,谢谢
一个。未初始化的指针未初始化。
1 | static MotionManagerSingleton *_sharedInstance; |
不会让你的motionmanagersingleton指向
二。声明为