美文网首页
iOS开发中ARC和MRC都可以用的单例模式?

iOS开发中ARC和MRC都可以用的单例模式?

作者: 随心吧 | 来源:发表于2017-02-20 13:56 被阅读49次

** 单例模式- 通用版本(ARC&MRC)**

  • (1)有意思的对话

  •  01 问:写一份单例代码在ARC和MRC环境下都适用?
    
答:可以使用条件编译来判断当前项目环境是ARC还是MRC
  • 02 问:条件编译的代码呢,么么哒?
    
//答:条件编译
#if __has_feature(objc_arc)
//如果是ARC,那么就执行这里的代码1
#else
//如果不是ARC,那么就执行代理的代码2
#endif
  • 03 问:在项目里面往往需要实现很多的单例,比如:下载、网络请求、音乐播放等等,弱弱的问一句单例可以用继承吗?
答:单例是"不可以"用继承的,如果想一次写就,四处使用,那么推荐亲使用带参数的宏定义啦!
  • 04 问:宏定义怎么弄?
答:这个嘛~~回头看一眼我的代码咯,亲。

下载:单例模式demo(ARC和MRC环境下通用)

**(2)使用带参数的宏完成通用版单例模式代码 **

 01 注意:条件编译的代码,不能包含在宏定义里面
 02 宏定义的代码只需要写一次就好,之后直接拖到项目中用就OK

(3 )代码如下:

  • (01) .h文件
#import <Foundation/Foundation.h>

@interface ZWJTool : NSObject<NSMutableCopying,NSCopying>


//思路:重写alloc /new (内部进行alloc分配空间,init对象初始化); (严谨)copy/mutablCopy  方法

//1 :重写alloc即:allocWithZone
+(instancetype)allocWithZone:(struct _NSZone *)zone;

//2 :提供一个外界访问的类+
+ (instancetype )shareTool;
//3 :重写release+retain方法(MRC)
@end
  • (02).m文件

#import "ZWJTool.h"

@implementation ZWJTool
//修改环境ARC-MRC buildSetting——automatic

//思路:重写alloc /new (内部进行alloc分配空间,init对象初始化); (严谨)copy/mutablCopy  方法

//1 :重写alloc即:allocWithZone
//2 :提供一个外界访问的类
//3 :严谨:copy和mutablaCopy进行处理
// 4 ;重写release方法;重写retain方法




//0 .创建一个局部访问对象
 static   ZWJTool *_instance;

//1 :重写alloc即:allocWithZone
+(instancetype)allocWithZone:(struct _NSZone *)zone
{

    //实现在整个程序运行过程中,只初始化一次
    /*
     1.1 懒加载 (保证建立一次,不能保证资源竞争) pass
     
     1.2 锁 sycn  建议
     1.3 GCD一次函数 建议
     
     */
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone: zone];
    });

    return _instance;
}


//2 :提供一个外界访问的类
+ (instancetype )shareTool
{

    return [[self alloc] init ];
}

//3 :严谨:copy和mutablaCopy进行处理

-(id)mutableCopyWithZone:(NSZone *)zone
{
    return _instance;

}
-(id)copyWithZone:(NSZone *)zone
{

    return _instance;
}

#pragma mark - 条件编译

//条件满足ARC
# if __has_feature(objc_arc)
//否则执行MAC
# else

-(instancetype)retain
{

    return _instance;
}
-(oneway void)release
{

}
//约定习惯,非arc情况为最大值,告诉是单利
-(NSUInteger)retainCount
{
    return MAXFLOAT;

}
# endif

@end

相关文章

  • iOS之单例设计模式

    iOS开发多线程篇—单例模式(ARC\MRC) 简单说明: 设计模式:多年软件开发,总结出来的一套经验、方法和工具...

  • 单例模式(单例宏)

    单例模式 单例模式(arc) 类的实现 调用单例 单例模式(mrc) 除了上边的方法我们在mrc的时候还需要增加一...

  • The Singleton Pattern 单例模式

    单例模式的作用 单例模式的使用场合 单例模式在ARC\MRC环境下的写法有所不同,需要编写2套不同的代码 可以用宏...

  • iOS浅谈单例

    ARC MRC 抽取单例 单例模式是不能使用继承的 具体使用

  • iOS开发-单例模式(ARC与MRC)

    单例一般作为工具类单例命名:一般情况下如果一个类是单例,那么就会提供一个类方法用于快速创建单例对象而且这个类方法的...

  • iOS开发中ARC和MRC都可以用的单例模式?

    ** 单例模式- 通用版本(ARC&MRC)** (1)有意思的对话 0...

  • iOS 单例模式

    概念相关 (1)单例模式 (2)使用场合 2 ARC实现单例 (1)步骤 (2)相关代码 3 MRC实现单例 (1...

  • 单例模式

    这篇文章的主要内容包括:1、在ARC中完成一个单例模式的三步2、在MRC中完成一个单例模式的三步3、单例模式通用宏...

  • iOS开发中单例模式宏,在MRC和ARC通用

    『导言』 亲们!有木有遇到这种情况:在iOS开发中多处用到单例模式,比如:多处处理网络请求况下,这时候难道不停地写...

  • iOS单例模式之MRC和ARC单例类

    在iOS的开发中,我经常会用到的一种设计模式:单例模式,目的是让这个对象只实例化一次,在内存中只有一份内存。而且是...

网友评论

      本文标题:iOS开发中ARC和MRC都可以用的单例模式?

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