c++ 单例
- class CSingleton
- {
- private:
- CSingleton() {} //构造函数是私有的
- static CSingleton *m_pInstance;
- public:
- static CSingleton * GetInstance() {
- if(m_pInstance == NULL) //判断是否第一次调用
- m_pInstance = new CSingleton();
- return m_pInstance;
- }
- };
objc 单例,objc 单例 (ARC 与 非ARC 一样写法)
- + (NSObject *)singleton {
- static dispatch_once_t once;
- static NSObject *__obj = nil;
- dispatch_once(&once, ^ {
- __obj = [[NSObject alloc] init];
- });
- return __obj;
- }
我的疑问 ?如下,
[[NSObject alloc] init] 是在堆上,在ARC下 谁”维护或拥有“ 这块堆内存? 按照c++的编译原理理解,
__obj 仅仅是一个静态变量指向一块堆内存,不能保证堆内存的存在 !
难道 ARC 时,有做特殊处理??
于是 做进一步了解,通过clang -rewite-objc -objc-arc 和 clang -rewite-objc 都发现了 如下代码:
static struct 对象,疑惑 貌似解开了!
参考链接
http://segmentfault.com/q/1010000000176896