单例写法

简便的写法,但是通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 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值