iOS中类单例方法的一种实现
2015-11-13 16:05
357 查看
在Cocos2D编程中,很多情况我们需要类只生成一个实例,这称之为该类的单例类.
一般我们在类中这样实现单例方法:
注意静态变量sharedInstance也可以放到类外部去.
但是如果是多线程环境中,上述方法并不能一定保证生成唯一实例,你还必须添加同步代码.
一不小心,你写的同步代码有可能就是错的.如果是简单的Cocos2D单线程程序很可能发现不了,如果放到复杂的多线程App中运行可能就会出现莫名其妙的错误.
殊不知Foundation平台中已经提供了简单的解决办法,我们可以这样写:
一般我们在类中这样实现单例方法:
+(instancetype)sharedInstance{ static Foo *sharedInstance; if(!sharedInstance){ sharedInstance = [Foo new]; } return sharedInstance; }
注意静态变量sharedInstance也可以放到类外部去.
但是如果是多线程环境中,上述方法并不能一定保证生成唯一实例,你还必须添加同步代码.
一不小心,你写的同步代码有可能就是错的.如果是简单的Cocos2D单线程程序很可能发现不了,如果放到复杂的多线程App中运行可能就会出现莫名其妙的错误.
殊不知Foundation平台中已经提供了简单的解决办法,我们可以这样写:
+(instancetype)sharedInstance{ static dispatch_once_t once; static Foo *sharedInstance; dispatch_once(&once,^{ sharedInstance = [self new]; }); return sharedInstance; }
相关文章推荐
- iOS中类单例方法的一种实现
- iOS 9音频应用播放音频之第一个ios9音频实例
- iOS 9 创建plist 文件、或文件路径查找
- iOS之汉字转拼音
- 将时间戳转换为时间,并输出“刚刚”、“昨天”、“XX小时前”等
- iOS N个数组,从每个数组中取出一个元素,组合,成为一个新的数组的集合
- ios 键盘风格与类型
- IOS 版本控制判断
- IOS支付宝支付
- ios中Json解析的四种方法
- base64Bytes = [base64Data bytes]; const unsigned char *bytes = [self bytes]; 支付宝错误
- ios 中绘制图形
- runtime 总结
- nagios 配置文件详解
- ios开发笔记-2-毛玻璃效果
- ios加解密
- ios开发笔记-1-tableView
- iOS/OS X内存管理(一):基本概念与原理
- ios客户端本地校验iap
- iOS通知NSNotification传值的使用