美文网首页iOS面试题
单例 - 创建单例需要重写的方法

单例 - 创建单例需要重写的方法

作者: ShenYj | 来源:发表于2016-08-21 16:04 被阅读0次

实现单例,首先遵循NSCopy协议(遵循协议是为了重写协议中的方法)

  • 在MRC下的示例代码:
#import "AudioTools.h"

@implementation AudioTools

static id _instanceType = nil;
// 自定义类方法创建单例
+(instancetype)sharadAudioTools{
    //一次性执行实现单例
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instanceType = [[self alloc]init];
    });
    return _instanceType;
}
// 严谨写法需要重写此方法,避免alloc]init或new实例化新对象
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instanceType = [super allocWithZone:zone];
    });
    return _instanceType;
}
// 防止对象Copy操作 (一般此方法默认只对NSString类型有效)
-(id)copyWithZone:(NSZone *)zone{
    return _instanceType;
}
//MRC下防止手动销毁对象(重写后不执行任何操作)
-(oneway void)release{
    
}

//以下为其他引用计数器操作方法
-(instancetype)retain{
    return _instanceType;
}
-(instancetype)autorelease{
    return _instanceType;
}
- (NSUInteger)retainCount{
    return 1;
}
@end
  • 在ARC下示例代码:
#import "NetWorkTools.h"

@implementation NetWorkTools
static id _instanceType = nil;
//自定义类方法
+(instancetype)sharadNetWorkTools{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instanceType = [[self alloc]init];
    });
    return _instanceType;
}
//重写父类方法,防止通过alloc]init或new的方式开辟新空间
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instanceType = [super allocWithZone:zone];
    });
    return _instanceType;
}
//防止对象copy操作
-(id)copyWithZone:(NSZone *)zone{
    return _instanceType;
}
@end

相关文章

  • 懒加载和单例

    懒加载 声明属性 重写get方法 Swift 单例的创建方式 方式一:创建单例工厂方法(重写alloc完善) 声明...

  • 单例 - 创建单例需要重写的方法

    实现单例,首先遵循NSCopy协议(遵循协议是为了重写协议中的方法) 在MRC下的示例代码: 在ARC下示例代码:

  • 创建单例之经验

    今天同事创建了一个单例,但是一调用那个单例就走不到下一行。 追查了半天,发现是在单例里重写了Init方法,然而在i...

  • 单例模式 实现(MRC和ARC)和宏抽取

    MRC环境-单例实现 .h文件实现 .m文件实现 实现一个类方法重写五个系统方法 ARC环境下- 单例实现 当需要...

  • iOS swift创建单例(Singleton)

    由于需要封装一个数据的的单例,所以在网上搜索了创建单例的方法。具体的单例是什么?以及单例优缺点,在这里作为菜鸟的我...

  • 单例模式、异常、模块

    单例模式 创建单例-保证只有1个对象 创建单例时,只执行1次init方法 目的 —— 让 类 创建的对象,在系统中...

  • Swift-5行代码创建单例

    创建单例的方法

  • 单例模式

    1. 什么是单例模式? 创建单例类的方法叫单例模式. 单例类, 就是只能产生一个对象的类. 2. 为什么使用单例模...

  • swift中单例的创建以及使用

    siwft中单例的使用方法 创建单例 ** class TheOneAndOnlyKraken {static l...

  • iOS 单例模式 - 单例对象销毁【GCD】

    单例对象的创建方式 单例.h 文件的实现 单例的.m 文件的实现 单例对象的销毁【GCD创建的方式】 使用单例对象...

网友评论

    本文标题:单例 - 创建单例需要重写的方法

    本文链接:https://www.haomeiwen.com/subject/mqcwsttx.html