简便的写法,但是通alloc 、init,还是会创建出一个独立的对象。单例不太完整
[代码]c#/cpp/oc代码:
01 | @implementation SingletonClass |
02 |
03 | +(SingletonClass *)singletonClassInstance{ |
04 | static SingletonClass *singletonClassInstance; |
05 | @synchronized(self){ |
06 | if (!instance){ |
07 | singletonClassInstance = [[SingletonClass alloc] init]; |
08 | } |
09 | } |
10 | return singletonClassInstance; |
11 | } |
12 |
13 | //其他的变量和方法 |
14 |
15 | @end |
[代码]c#/cpp/oc代码:
01 | // Man.h文件的代码 |
02 | // OC4单例_线程 |
03 | #import <Foundation/Foundation.h> |
04 |
05 | @ interface Man : NSObject |
06 | @property (retain,nonatomic) NSString * name; |
07 |
08 | //单例声明 |
09 | + (id) getInstance; |
10 | @end |
11 |
12 |
13 | // Man.m文件中代码 |
14 | static Man *man = nil; //为单例类声明一个静态的实例变量,并且初始化为nil |
15 | @implementation Man |
16 |
17 | +(id) getInstance{ |
18 | @synchronized(self){ //互斥锁,用于:多线程的条件下,防止两个线程同时调用创建方法 |
19 | if (man == nil) { //只有在静态实例为nil的时候,参数一个类的实例,这个实例通常称为“共享的实例” |
20 | man = [[[self alloc] init] autorelease]; |
21 | } |
22 | } |
23 | return man; |
24 | } |
25 |
26 | +(id) allocWithZone:(NSZone *)zone{ //重写allocWithZone用于确定:不能使用其他方法创建类的实例<br> |
27 | @synchronized(self){ |
28 | if (man == nil) { |
29 | man = [super allocWithZone:zone]; |
30 | return man; |
31 | } |
32 | } |
33 | return nil; //如果写成这样 return [self getInstance] 当试图创建新的实例时候,会调用到单例的方法,达到共享类的实例 |
34 | } |