当前位置: 首页 > news >正文

外国优秀设计网站推荐建设电子商务网站必须首先确定的是

外国优秀设计网站推荐,建设电子商务网站必须首先确定的是,wordpress破解登录密码破解,企业信用信息公示系统网址gsxtiOS学习 前言单例模式的概念单例模式的优缺点单例模式的两种模式懒汉模式饿汉模式单例模式的写法 总结 前言 在一开始学习OC的时候#xff0c;我们初步接触过单例模式。在学习定时器与视图移动的控件中#xff0c;我们初步意识到单例模式的重要性。对于我们需要保持的控件我们初步接触过单例模式。在学习定时器与视图移动的控件中我们初步意识到单例模式的重要性。对于我们需要保持的控件使用单例可以有效的防止再次创建而造成的bug现在我们深入学习一下单例模式。 单例模式的概念 如果一个类有且仅有一个实例并提供一个类方法供全局调用那么这个类就被称为单例类。 而使用这样的类就是单例模式。 单例模式的优缺点 优点 全局访问单例模式确保一个类只有一个实例并提供全局访问点方便在整个应用中共享数据或功能。节省资源由于只创建一个实例可以减少内存开销避免重复创建相同对象。控制实例化通过私有构造函数防止外部代码创建多个实例确保数据一致性。 缺点 隐藏依赖使用单例可能导致代码中隐藏的依赖关系增加了代码的耦合性降低了可测试性。难以扩展单例模式不易于扩展若需要改变实例的行为可能需要修改单例类的代码。线程安全问题在多线程环境下单例的实现需要特别注意线程安全若处理不当可能导致数据不一致。 单例模式的两种模式 实现单例模式我们需要保证永远只创建一个实例。那么创建实例的方法有四种因此我们需要分别改写这四种方法。 通过alloc init创建通过类方法创建通过copy创建通过mutableCopy 创建 懒汉模式 懒汉模式的主要特点是在需要时才会创建单例对象的实例而不是在程序启动时就立即创建。通过延迟对象的初始化来节省资源和提高性能。 如同名字除了在用到时“懒得创建”。 #import Singletion.himplementation Singletion static id instance nil;(instancetype)allocWithZone:(struct _NSZone *)zone {if(instance nil) {synchronized (self) {if(instance nil) {instance [super allocWithZone:zone];}}}return instance; }(instancetype)mySingletion {if (instance nil) {synchronized (self) {instance [[self alloc] init];}}return instance; }-(id)copyWithZone:(NSZone *)zone {return instance; }-(id)mutableCopyWithZone:(NSZone *)zone {return instance; } 验证代码 #import UIKit/UIKit.h #import AppDelegate.h #import Foundation/Foundation.h #import Singletion.hint main(int argc, char * argv[]) {NSString * appDelegateClassName;autoreleasepool {// Setup code that might create autoreleased objects goes here.appDelegateClassName NSStringFromClass([AppDelegate class]);Singletion *singletion [Singletion mySingletion];Singletion *copySingletion [singletion copy];Singletion *mutableCopySingletion [singletion mutableCopy];Singletion *allocSingletion [[Singletion alloc] init];NSLog(%d,singletion copySingletion);NSLog(%d,singletion mutableCopySingletion);NSLog(%d,singletion allocSingletion);NSLog(%d,copySingletion mutableCopySingletion);}return UIApplicationMain(argc, argv, nil, appDelegateClassName); }结果 饿汉模式 饿汉模式的特点是在一开始就创建单例对象的实例提前创建单例对象并且分配好内存空间。使用时就是将该对象拿出来。 #import Singletion.himplementation Singletion static id instance nil; (void)load{instance [[self alloc] init]; }(instancetype)mySingletion {if (instance nil) {synchronized (self) {instance [[self alloc] init];}}return instance; }(instancetype)allocWithZone:(struct _NSZone *)zone {if(instance nil) {synchronized (self) {if(instance nil) {instance [super allocWithZone:zone];}}}return instance; }-(id)copyWithZone:(NSZone *)zone {return instance; }-(id)mutableCopyWithZone:(NSZone *)zone {return instance; } 重点就是在程序加载开始就创建这个单例对象。 判断代码 #import UIKit/UIKit.h #import AppDelegate.h #import Foundation/Foundation.h #import Singletion.hint main(int argc, char * argv[]) {NSString * appDelegateClassName;autoreleasepool {// Setup code that might create autoreleased objects goes here.appDelegateClassName NSStringFromClass([AppDelegate class]);Singletion *singletion [Singletion sharedInstance];Singletion *copySingletion [singletion copy];Singletion *mutableCopySingletion [singletion mutableCopy];Singletion *allocSingletion [[Singletion alloc] init];NSLog(%d,singletion copySingletion);NSLog(%d,singletion mutableCopySingletion);NSLog(%d,singletion allocSingletion);NSLog(%d,copySingletion mutableCopySingletion);}return UIApplicationMain(argc, argv, nil, appDelegateClassName); } 运行结果 单例模式的写法 原本在书中的写法为 这种方法在多线程调用时并不能保证成功使用单例模式。 (instancetype)mySingleton {if (instance nil) {instance [[self alloc] init];}return instance; }从而我们使用加锁来保证多线程中也可以创建单例类 加锁写法 (instancetype)allocWithZone:(struct _NSZone *)zone {if(instance nil) {synchronized (self) {if(instance nil) {instance [super allocWithZone:zone];}}}return instance; }还有一个GCD的写法换一种加锁方式。 GCD写法 (instancetype)allocWithZone:(struct _NSZone *)zone {static dispatch_once_t onceToken 0;dispatch_once(onceToken, ^{instance [super allocWithZone:zone];});return instance; }GCD加锁相比于第二个加锁方法在性能上更有优势。因为它省去了锁操作代替的是大量的原子操作直接利用了 lock 的汇编指令靠底层 CPU 指令来支持的。 dispatch_once 主要是根据 onceToken 的值来决定怎么去执行代码。 1.当 onceToken 0 时线程执行 dispatch_once 的 block 中代码 2.当 onceToken -1 时线程跳过 dispatch_once 的 block 中代码不执行 3.当 onceToken 为其他值时线程被阻塞等待 onceToken 值改变。 当线程调用mySingleton方法时此时 onceToken 0调用 block 中的代码此时 onceToken 其他值。 当其他线程再调用 mySingleton 方法时onceToken为其他值线程阻塞。当 block 线程执行完 block之后onceToken -1其他线程不再阻塞跳过 block。下次再调用mySingleton方法 时 block 已经为-1直接跳过 block。 总结 饿汉模式和懒汉模式都是实现单例模式的一种方法各有优点。 饿汉模式用空间换取时间先创建出来这样再调用时就不需要花时间判断节省运行时间。 懒汉模式用时间换空间如果一直不需要创建这个单例则节约了内存空间。一旦进行判断是否需要创建该实例则会浪费判断的时间。 我们还需要关注这里通过加锁的方式创建单例以保证线程安全。这是因为如果到了多线程的环境里多个进程同时访问单例该单例模式也有可能返回不同的对象。因此我们可以通过加锁和GCD模式来实现保证线程安全。
http://www.dnsts.com.cn/news/16071.html

相关文章:

  • 网站设计旅行社新闻内容裕华建设集团网站
  • 广东网站制作公司排名上海备案证查询网站查询
  • 反钓鱼网站建设期网络营销专员岗位职责
  • 福州网站营销在线简历
  • 电子商务网站建设知识企业标志设计
  • 微网站建设微网站建设wordpress评论框提示
  • 济宁做网站的企业建设网站的要点
  • php wordpress单本小说网站源码+采集网络营销案例2022
  • 两学一做山东网站学校诗歌网站建设
  • 主机网站建设成都十大广告公司排名
  • 盘锦工程建设信息网站企业官网设计模板
  • 济南做网站的公司网页设计实验报告课程建议
  • 杭州网站商场开发餐饮 网站模板
  • 建站快车来电做一款小程序需要多少钱
  • 宝塔建设网站网站建设阶段性工作重点
  • 大理住房和城乡建设局网站跨境电商资讯网
  • 山东工程网站建设建设网站找网络公司
  • 做瞹视频网站哪里看h5网站页面设计
  • 微信公众号登录wordpress网站吗微信公众号 链接微网站
  • 上海商务网站建设网站服务器租用怎样收费
  • 网站结构 扁平结构 树状结构做煤层气的网站
  • 建设一个网站需要什么手续深圳建设工程交易
  • 单仁咨询建设网站个人网页可以做什么内容
  • 建设网站外国人可搜到广东建设厅网站首页
  • 旅游电子商务网站的建设包括哪些步骤?网站建设中有哪些常用技术?成都网站建设公司创新互联
  • 做网站作品是静态搜索网站的软件
  • asp 网站开发福建建设执业资格中心网站
  • 做网站的服务器带宽一般多少网站百度地图标记代码
  • 网站视频怎么做的好处哈尔滨seo优化培训
  • 有什么网站是可以做动态图的商贸网站建设