时间:2021-05-19
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
1、书写步骤
1)、创建类方法,返回对象实例.以shared default current开头。
2)、创建一个全局变量用来保存对象的引用
3)、判断对象是否存在,若不存在,创建对象
2、具体单例模式的几种模式
第一种单例模式
第二种单例模式
第三种单例模式
第四种单例模式
MRC全面实现单例写法(了解)
#import <Foundation/Foundation.h>#import "UserHelper.h" void func() { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"haha"); });} int main(int argc, const char * argv[]) { @autoreleasepool { // [UserHelper logout]; if ([UserHelper isLogin]) { UserHelper * helper = [UserHelper sharedUserHelper]; NSLog(@"username = %@ password = %@",helper.userName,helper.password); } else { char name[20]; char pwd[20]; NSLog(@"请输入用户名"); scanf("%s",name); NSLog(@"请输入密码"); scanf("%s",pwd); NSString * userName = [[NSString alloc] initWithUTF8String:name]; NSString * password = [[NSString alloc] initWithUTF8String:pwd]; if (userName && password) { [UserHelper loginWithUserName:userName password:password]; UserHelper * helper = [UserHelper sharedUserHelper]; NSLog(@"username = %@ password = %@",helper.userName,helper.password); } } // UserHelper * help1 = [UserHelper sharedUserHelper];// help1.userName = @"dahuan";// help1.password = @"123456";// NSLog(@"%p",help1);// NSLog(@"%@",help1.userName);// NSLog(@"%@",help1.password);//// // UserHelper * help2 = [UserHelper sharedUserHelper];// help2.password = @"zxc";// NSLog(@"%p",help2);// NSLog(@"%@",help1.userName);// NSLog(@"%@",help1.password); } return 0;} //class.h#import <Foundation/Foundation.h> @interface UserHelper : NSObject //1、创建类方法,返回对象实例 shared default current + (UserHelper *)sharedUserHelper; @property (nonatomic, copy) NSString * userName; @property (nonatomic, copy) NSString * password; + (BOOL)isLogin; + (void)loginWithUserName:(NSString *)userName password:(NSString *)password; + (void)logout; @end // class.m#import "UserHelper.h" //2、创建一个全局变量 #define Path @"/Users/dahuan/Desktop/data" static UserHelper * helper = nil; @implementation UserHelper //+ (void)initialize {// // if ([self class] == [UserHelper class]) {// helper = [[UserHelper alloc] init];// }//} + (UserHelper *)sharedUserHelper { //3、判断对象是否存在,若不存在,创建对象 //线程安全// @synchronized(self) {// // if (helper == nil) {// helper = [[UserHelper alloc] init];// }// } //gcd 线程安全 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ helper = [[UserHelper alloc] init]; }); return helper;} - (instancetype)init { if (self = [super init]) { NSString * data = [NSString stringWithContentsOfFile:Path encoding:NSUTF8StringEncoding error:nil]; if (data) { NSArray * array = [data componentsSeparatedByString:@"-"]; _userName = array[0]; _password = array[1]; } } return self;} + (BOOL)isLogin { UserHelper * helper = [UserHelper sharedUserHelper]; if (helper.userName && helper.password) { return YES; } return NO;} + (void)loginWithUserName:(NSString *)userName password:(NSString *)password { UserHelper * helper = [UserHelper sharedUserHelper]; helper.userName = userName; helper.password = password; NSArray * array = @[userName,password]; NSString * data = [array componentsJoinedByString:@"-"]; [data writeToFile:Path atomically:YES encoding:NSUTF8StringEncoding error:nil];} + (void)logout { NSFileManager * fm = [NSFileManager defaultManager]; if ([fm fileExistsAtPath:Path]) { [fm removeItemAtPath:Path error:nil]; }} @end以上就是关于iOS单例模式的全部内容,希望对大家的学习有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
单例模式概念:java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一下特点:1、单例类只能有一个实例。2、
java单例模式的实例详解概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有一下特点:
前言除了MVC、MVVM之外,单例模式可以说是iOS开发中另一常见的设计模式。无论是UIKit或是一些流行的三方库,我们都能看到单例的身影。而我们开发者本身也会
单例模式单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用
这篇文章主要介绍了PHP中数据库单例模式的实现代码分享,本文先是讲解了单例模式的一些知识,然后给出了数据库单例模式实现代码。什么是单例模式单例模式顾名思义,就是