您的位置:首页 > 移动开发 > Objective-C

objective-c中的Singleton单例模式的完整实现示例

2012-02-23 15:18 567 查看
转载自:http://blog.csdn.net/duboleon/article/details/6337174

Objective中单例模式的实现,应该是比较完整的包括了objc的单例的各个点。详细看代码注释,注意最后用c++的析构函数实现instance的释放,所以源文件类型必须是.mm格式。

//
//  FullSingleton.h
//  *********
//
//  Created by ********* on 12-2-23.
//  Copyright (c) 2012年 ***********. All rights reserved.
//

#import
<Foundation/Foundation.h>

@interface FullSingleton :
NSObject {
    
}

+(FullSingleton *) getInstance;

@end

//
//  FullSingleton.mm
//  *********
//
//  Created by ********** on 12-2-23.
//  Copyright (c) 2012年 *********. All rights reserved.
//

#import
"FullSingleton.h"

static
FullSingleton * instance =
nil;

@interface FullSingleton(privateMethods)

-(void) realRelease;

@end

@implementation FullSingleton

//
获取单例~
+(FullSingleton*) getInstance {
   
@synchronized(self) {
       
if (instance ==
nil) {
            [[self
alloc] init];
        }
    }
   
return
instance;
}

//
唯一一次 alloc 单例,之后均返回 nil~
+(id) allocWithZone:(NSZone *)zone {
   
@synchronized(self) {
       
if (instance ==
nil) {
           
instance = [super
allocWithZone:zone];
           
return instance;
        }
    }
   
return nil;
}

// copy
返回单例本身~
-(id) copyWithZone:(NSZone *)zone {
   
return self;
}

// retain
返回单例本身~
-(id) retain {
   
return self;
}

// 引用计数总是为 1~
-(NSUInteger) retainCount {
   
return 1;
}

// release
不做任何处理~
-(oneway
void) release {
    
}

// autorelease
返回单例本身~
-(id) autorelease {
   
return self;
}

//
真 release 私有接口~
-(void) realRelease {
    [super
release];
}

//
-(void) dealloc {
   
printf("举例:在此处做一些单例结束时的收尾处理/n"); 
    [super
dealloc];
}

@end

//
程序结束时析构静态 c++ 类对象 garbo,在Garbo类的析构函数中释放instance~
struct Garbo {
    ~Garbo(){
        [instance
realRelease];
    }
};
static
Garbo garbo;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  interface struct c