iOS单例模式

单例模式是在iOS开发中常用的开发模式之一,使用单例模式是为了保证在整个程序中,所定义的属性值是唯一的

之前对于单例模式一直模糊不清,每个人的写法也各有不同,现在整理两种常用的写法如下,方便查找和参考

#import <Foundation/Foundation.h>

@interface People : NSObject
+ (People *)shareManager;       //类方法
@property (nonatomic, copy) NSString *peopleName;  //属性值
@end


#import "People.h"

@implementation People

@synthesize peopleName;

static People *singlePeople = nil;
+ (People *)shareManager {
    dispatch_once_t once;
    dispatch_once(&once, ^{
        singlePeople = [[self alloc] init];
    });
    return singlePeople;
}
@end

在类方法中使用GCD的方式,dispatch_once 这个作用是在整个程序的生命周期中只执行一次代码,而且保证此线程是同步的;dispatch_once_t 是GCD提供的结构体,在使用的过程中把地址传递给dispatch_once,dispatch_once就可以记录代码是否被调用过

#import <Foundation/Foundation.h>

@interface PeopleManager : NSObject
+ (PeopleManager *)shareInstance;
@property (nonatomic, copy) NSString *managerp;
@end

#import "PeopleManager.h"
static PeopleManager *people = nil;
@implementation PeopleManager
+ (PeopleManager *)shareInstance {
    @synchronized (people = nil) {
        people = [[self alloc] init];
    }
    return people;
}

- (instancetype)init {
    self = [super init];
    if (self) {
        
    }
    return self;
}

- (NSString *)managerp {
    return @"这是一个单例";
}

@end

第二种写法同样是使用类方法,synchronized在方法中的意思是和GCD中的dispatch_once 方法是同样的效果,保证线程的同步

- (NSString *)managerp {
    return @"这是一个单例";
}

@synthesize peopleName;

这两个方法是一致的,都是表示get/set方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...
    雷鸣1010阅读 3,547评论 0 19
  • 本文内容:iOS的单例模式NSUserDefaults的使用总结:iOS单例模式 and NSUserDefaul...
    Kingsleeeey阅读 1,755评论 0 5
  • (1)单例模式 在程序运行过程,一个类只有一个实例 (2)使用场合 在整个应用程序中,共享一份资源(这份资源只需要...
    奥斯卡先生阅读 344评论 1 0
  • 转自于宏创学院:单例singleton模式–单例类的实现 – 宏创学院 以前写的单例类只是提供了一个 类方法让外界...
    qiongyong阅读 886评论 0 4
  • 大才子徐志摩放弃合法妻子张幼仪,大肆追求林徽因、陆小曼。说是诗人多情也好,还是才子浪漫也罢。更多原因,怕是因为他...
    Y老寒阅读 418评论 1 3