ios笔记-单例文字代码详解
单例设计模式是ios开发中几大设计模式之一,每个项目中必有单例。下面我用文字加代码的方式讲一下单例模式。
1.我们简单的创建一个单例类
#import <Foundation/Foundation.h>
@interface SingloneTest : NSObject
+ (id)shareInstance;
@end
#import "SingloneTest.h"
@implementation SingloneTest
+ (id)shareInstance
{
static id shareInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareInstance = [[NSObject alloc] init];
});
@end
2.在appdelegate中,这样写
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);
return YES;
}
打印结果:
SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~
3.在控制器里再次创建单例类
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);
}
打印结果:
SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~
两次的打印结果相同,证明是一个对象实例,所以在整个工程中,单例可以跳过多个控制器,记录自己的状态,不需要逐个页面进行传值。
有同学问,问什么这样创建的单例,在方法执行结束没有被销毁呢?因为 static id shareInstance; static把单例对象指针放在了静态储存区,使数据持久化,程序开始就进行初始化,且只初始化一次,不随runtime机制进行销毁。所以每次调用+ (id)shareInstance; 方法,其实都是取同一个SingloneTest对象。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。