单例类

#import <Foundation/Foundation.h>

@interface Single : NSObject
@property (nonatomic,copy)NSString *value;
+(Single *)SingleModel;
@end

#import "Single.h"
@implementation Single
static Single *single =nil;
+ (Single *)SingleModel
{
    //block内代码只会被执行一次 是否被执行 是由once来记录
    static dispatch_once_t once;
        dispatch_once(&once, ^{
            single =[[Single alloc] init];
        });
    return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        single =[super allocWithZone:NULL];
    });
    return single;
}

另外 两种加锁方式

@implementation Single
static Single * single =nil;
+ (Single *)SingleModel
{
    //@synchronized 资源保护锁 防止多线程操作时 对同一资源访问时造成资源混乱而设定的
    //()标示符 代表类  或者使用对象类型  一般使用self
    @synchronized (self)
    {
        if (single==nil)
        {
            single =[[Single alloc] init];
        }
    }
    return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
    //NSLock 一种加锁的形式 和 @synchronized (self)效果一样
    if (single ==nil)
    {
        NSLock *lock =[[NSLock alloc] init];
        //[lock lock]和[lock unlock]之间的代码就是要保护的资源
        [lock lock];
        single = [super allocWithZone:NULL];
        [lock unlock];
    }
    return single;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容