内容大纲:1:单例模式介绍 2:单例模式的使用
先来说说写作:关于写作,我(业余的)个人认为最初写作的目的就是为了单纯记事,事情每天都有在发生,有些事情也许会触动自己的心弦,或激动、或悲伤、或愉悦、或单纯的是为了纪念······等等,这样想,文字的延续真是很有意义的事,而且意义重大到促进历史的发展(跑篇来),总之事情是怎么进行的,感情就会怎么衍生,而感情的衍生又会促进事情的再发生。
将这些事情记录下来,能够为某些热衷于研究的人(个人认为这些人记性已经很好来,真是的),更好的了解自己,或为下次的研究做铺垫,也可能是方便记忆····如此这般,万纵写作,就有来历史的文本,研究的文本,个人的传记,技术的分级-----(其实如果你想学东西,知识的海洋里,不用水淹死你,光这些书就能压倒你,所以如何在这些书中挑选精品呢?我看看写下一篇《慧眼识书-第一感觉》,如果你想创作东西,创作从无到有的过程,这种境界~~我想,每个人一直都在路上,从来没有停止过。)。有些东西不想被人看到怎么破?那就深埋心底吧,这样就像埋酒一样,越久醇香·······。至于好的作品,以前写作都是通过QQ在空间写一些个人杂感。第一次在技术博客(Simple Book,感觉和facebook好像(~V~)上写作,难免有些排版的问题,也许我该学好排版再来,有利于我下次自己看。但是,我就是来练练手的。理论和经验的结合在实践中,我认为是最快的学习方式之一。好的作品,个人认为其实无所谓好坏,只有优劣,每一个人的理解不同,高深的东西,看不太懂,浅的东西,简单易用,写出大众喜闻乐见的东西,心累啊-拜托大众,作为大众之一,我只有努力来弥补,要看好的作品,请移步----->“图书馆”。
(一) 回到正题:关于第一个问题,Introduce singleton pattern.
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。大部分单例模式的作用大概就是共享信息,管理中心。单例在传值方面也是可以使用的。当然,单例也有缺点。后话了
在使用OC开发过程中,我们经常会使用系统单类来做一些你想做的事情。系统单例也是蛮多的,举几个经常用的吧;
1.1 [UIApplication sharedApplication] :这应该是app当中最最最重要的单例了。使用它可以做是、 遮罩、预览、引导~~等一系列你想做的事。
1.2 [NSNotificationCenter defaultCenter] :通知,作为一种设计模式,通知广泛用于反向界面传值,界面主题切换,监听某种事件的发生。
1.3 [NSUserDefaults standardUserDefaults] 系统本地化存储的一种方式,存储你的appKey 、主URL~~~保存一些常用,但是考虑安全的东西;
1.4 [NSFileManager defaultManager] ~文件类,不是很常用。不是很了解
系统类中有许多单例,可以深探;
(二)单例模式的使用和作用:using and working
使用单例:首先要创建单例:
2.1 单例继承自最原始的NSObject:
static id _instance = nil;
+ (id)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return id_instance;
}
+ (instancetype)sharedinstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
id_instance = [[self alloc] init];
});
return id_instance;
}
+ (id)copyWithZone:(struct _NSZone *)zone
{
return id_instance;
}
创建一个继承自NSObject 的类,类名随你取:下面是我定义的一些项目中用到的一些属性;
然后就是创建类;@implementation
第一块代码使用dispatch_once是一个只运行一次的代码块:也就是说,只要运行类一次,代码相当于废弃了。相当于不运行,是懒加载的一种吧,有没有大神熟悉这块的?可以指教的;
allocWithZone:这个方法是对象创建,比如使用alloc ]init];会走的方法,也就是说,这个方法是初级的,你可以在此拦截,alloc 方法 只是去调用allocWithZone:方法,进行内存
关于copyWithzone:这个方法,Apple 官港文档好像快要把它闲置了,原话是这样的:This method exists for history reasons;memory zones are no longer used by Object -C:(此方法存在有其历史原因,OC已经不使用这块zones的记忆区了)。
里面还有将单例类抽象出来的方式!在此不作解释:有想看的,移步这位大神的博客:https://yq.aliyun.com/articles/37325#1。向这位大神借鉴了许多知识,在此感谢!不请之处,还望谅解。
2.2 using :创建好单例后,在你需要的地方调用类方法,为属性赋值,然后就是传值类(目前我知道的有block,通知,通知,正向,反向传值(属性传值-全局变量传值)、代理传值、数据库传值、NSFileManager),目前我只使用类这些来传值,有其他翻阅这篇杂文的大神有知道的,还望不理赐教。感激不敬!
2.3 上面的单例类 创建的对象,你可以使用任何上述方式进行传值。而在传完值之后,是否需要对值清空处理,在MRC模式下,我好像没有这么做过;好像也没必要;
个人目前在使用swift作一些简单demo的测试;感觉OC虽在,地位缺较低了;swift还是比较于OC安全些,类型就相对安全许多;正在转swift~~~come on!文章结尾:First but not last, 文章肯定有需要改正或改进的地方,还希望各位同行能多多指点。