完整单例模式(处理多线程并发和alloc重用的写法)

来源:互联网 发布:张龙java培训视频 编辑:程序博客网 时间:2024/06/16 05:23
#import <Foundation/Foundation.h>
@interface GlobleManager : NSObject
+ (GlobleManager*) sharedInstance;

@end


#import "GlobleManager.h"
static GlobleManager *obj = nil; //第一步:静态实例,并初始化
@implementation GlobleManager
+ (GlobleManager*) sharedInstance  //第二步:实例构造检查静态实例是否为nil
{
    @synchronized (self){
        if (obj == nil)
        {
            obj = [[self alloc] init];
        }
    }
    return obj;
}
+ (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法,避免alloc出新实例
{
    @synchronized (self) {
        if (obj == nil) {
            obj = [super allocWithZone:zone];
            return obj;
        }
    }
    return nil;
}
- (id) copyWithZone:(NSZone *)zone //第四步同第三步。
{
    return self;
}
- (id)init
{
    @synchronized(self){
        self = [super init];
        //往往放一些要初始化的变量.
        
        return self;
    }
}
@end


0 0
原创粉丝点击