IOS小技巧——如何使用GCD创建单例模式

原创 2015年07月08日 01:11:21

步骤
1.建一个全局的变量
2.在allocWithZone: 方法中拦截内存的分配,并在方法内部加线程锁,防止多个线程同时加载方法
3.在新建一个share方法,方便外界分辨

1.ARC
@interface HMDataTool : NSObject
+ (instancetype)sharedDataTool;
@end

@implementation HMDataTool
// 用来保存唯一的单例对象
static id _instace;
// 为什么调用allocWithZone:方法而不调用alloc方法呢 ??
// 因为调用alloc方法,alloc方法实质上是调用allWihtZone:方法
+ (id)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [super allocWithZone:zone];
    });
    return _instace;
}
+ (instancetype)sharedDataTool
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [[self alloc] init];
    });
    return _instace;
}

- (id)copyWithZone:(NSZone *)zone
{
    return _instace;
}
@end
一些小知识补充

1.Static关键字的作用:{

// 加上了static 关键字,这个全局变量只能在该文件中使用,不能用extern(引用某个全局变量(并非定义))引用,以后声明全局变量,尽量用static
static id _person;

/*
 static :修饰变量
 1> 修饰全局变量
 *全局变量的作用域仅限于当前文件内部

 2> 修饰局部变量:
 *局部变量的生命周期 跟 全局变量类似
 *但是不能改变作用域(只能在函数内存在,出了函数外引用不到)
 * 能保证局部变量永远只初始化依次,再程序运行过程中,永远只有一份内存
 */
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ios--GCD实现单例模式

单例模式,也有人称之为单粒模式,从字面上就不难理解,单例模式既指一个类只有一个实例对象,现在我就用GCD来实现单例模式 首先创建一个person类,在person类的.m文件中创建多个对象,如下: ...
  • Arack
  • Arack
  • 2016-08-04 21:27
  • 175

单例模式在iOS中的应用——三种创建单例方法对比

单例模式优点 单例模式在内存中只有一个实例,减少了内存开支。特别是一个对象需要频繁的创建、销毁时,而创建与销毁的性能有无法优化,单例模式的优势就非常明显。单例模式只生成一个实例,减少了系统性能开...

【IOS 开发学习总结-OC-10】★ objective-c面向对象之——成员变量,模拟类变量,单例模式

OC 中变量根据定义位置的不同,可以分为3大类:成员变量,局部变量和全局变量。 之前提到过方法是由函数演化而来的,所以不管是方法中定义的变量,还是函数中定义的变量,都是局部变量。成员变量及其运行机制...

IOS开发笔记——单例模式

由java转入IOS开发了,自学配合实际项目记录一些项目中用到的技巧,APP比较小,涉及到的知识点比较简单,大牛就不用看了,小兵大家一起讨论。 单例模式就是确保在程序运行过程中,一个类只有一个实例,公...

iOS每日一记————————一些常用的小技巧(三)

在 Quartz 中如何设置旋转点 UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImageimageNamed:@...

iOS单例模式

  • 2015-08-01 17:34
  • 62KB
  • 下载

iOS 单例模式

  • 2013-08-21 12:18
  • 119KB
  • 下载

Objective-C在ARC下结合GCD的单例模式和宏模版

单例模式在iOS开发过程中经常用到,苹果提供过objective c单例的比较官方的写法: [cpp] view plaincopy static ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)