本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007
1. @implementation Singleton
2.
3. + (Singleton *)instance {
4. static Singleton *instance;
5.
6. @synchronized(self) {
7. if(!instance) {
8. instance = [[Singleton alloc] init];
9.
10.
11. }
12. }
13.
14. return instance;
15. }
16.
17. @end
这个单例可以用[Singleton instance]得到.
一次查阅下面的步骤:
第四行:
声明了静态变量,如果你有JAVA编程背景的话,这里或许会让你有点疑惑,在C(C++ 和 Objective-C)中,一个静态局部变量作用域存在于函数内,但是生命周期是整个程序,在下一次该函数调用时仍可使用。(和java中的类静态变量被该类各个实例变量共有的特点相似)。
译者注:关于静态变量有疑问的同学请猛击这里:http://baike.baidu.com/view/675642.htm
第六行:
我们想使用线程保护,这样同时的两个[Singleton instance]调用不会产生两个独立的对象实例。即使在一个单线程程序中,这种Synchronization不会有大的执行时间开销,而且这为以后开发打下了好的基础。
第七行:
检查是否该类对象实例已经初始化。我们是否需要生成该类的实例。
十四行:
返回创建的/已存在的对象实例。
2.
3. + (Singleton *)instance {
4. static Singleton *instance;
5.
6. @synchronized(self) {
7. if(!instance) {
8. instance = [[Singleton alloc] init];
9.
10.
11. }
12. }
13.
14. return instance;
15. }
16.
17. @end
这个单例可以用[Singleton instance]得到.
一次查阅下面的步骤:
第四行:
声明了静态变量,如果你有JAVA编程背景的话,这里或许会让你有点疑惑,在C(C++ 和 Objective-C)中,一个静态局部变量作用域存在于函数内,但是生命周期是整个程序,在下一次该函数调用时仍可使用。(和java中的类静态变量被该类各个实例变量共有的特点相似)。
译者注:关于静态变量有疑问的同学请猛击这里:http://baike.baidu.com/view/675642.htm
第六行:
我们想使用线程保护,这样同时的两个[Singleton instance]调用不会产生两个独立的对象实例。即使在一个单线程程序中,这种Synchronization不会有大的执行时间开销,而且这为以后开发打下了好的基础。
第七行:
检查是否该类对象实例已经初始化。我们是否需要生成该类的实例。
十四行:
返回创建的/已存在的对象实例。