转载请注明出处!!!

#undef AS_SINGLETON

#define AS_SINGLETON( __class ) \

- (__class *)sharedInstance; \

+ (__class *)sharedInstance;

#undef DEF_SINGLETON

#define DEF_SINGLETON( __class ) \

- (__class *)sharedInstance \

{ \

return [__class sharedInstance]; \

} \

+ (__class *)sharedInstance \

{ \

static dispatch_once_t once; \

static __class * __singleton__; \

dispatch_once( &once, ^{ __singleton__ = [[[self class] alloc] init]; } ); \

return __singleton__; \

} \

+ (instancetype)allocWithZone:(struct _NSZone *)zone \

{ \

static dispatch_once_t once; \

static __class * __singleton__; \

dispatch_once(&once, ^{ __singleton__ = [super allocWithZone:zone]; } ); \

return __singleton__; \

}

使用方法:在类.h中声明AS_SINGLETON(__class)

      .m中声明DEF_SINGLETON(__class)

解释:为了防止别人不小心利用alloc/init方式创建示例,也为了防止别人故意为之,我们要保证不管用什么方式创建都只能是同一个实例对象,这就得重写allocWithZone;之前我是没有这个的,这是alloc init 和shareinstance创建的不是同一个

参考链接:http://www.cocoachina.com/ios/20160713/17017.html?ref=myread这个写的很详细

ios oc单例宏定义的更多相关文章

  1. 完美单例宏定义(兼容ARC和MRC),项目中可以直接使用

     单例模式: 1.永远只分配一块内存来创建对象 2.提供一个类方法, 返回内部唯一的一个对象(一个实例) 3.最好保证init方法也只初始化一次 写一个宏定义文件,传入宏定义函数名,自动生成符合类名的 ...

  2. iOS快速单例宏

    // 单例 #define DECLARE_SHARED_INSTANCE(className) \ + (className *)sharedInstance; #define IMPLEMENT_ ...

  3. iOS单例 宏定义

    #define singleton_interface(className) \ + (className *)shared##className; // @implementation #defin ...

  4. iOS - 单例传值 (一)

    点击打开链接    iOS - 单例传值 (二) 单例只会对某个类实例化一次/单例类,对单例这个类实例化一次有且仅有一个对象 你单例初始化,只能初始化一次,然后你指向的对象,其实都是指向一个内存地址, ...

  5. iOS开发经常使用宏定义

    iOS开发经常使用宏定义 iOS开发中经常须要获取屏幕宽度高度,为view设置颜色,为imgagView设置图片等,我们都可定义一些宏,随时都可拿来使用,方便开发 <span style=&qu ...

  6. [iOS]封装单例类

    [iOS]封装单例类 今天在学习iOS的SQLite开发,发现在需要使用SQLite的每个视图中,都需要对数据库进行打开或关闭,觉得挺麻烦的:于是在想能否写个单例类对这些操作进行封(因以前一直在使用D ...

  7. iOS登录单例

    iOS登录单例 一,工程图. 二,代码. UserInfo.h #import <Foundation/Foundation.h> @interface UserInfo : NSObje ...

  8. OC单例快速实现

    首先新建一个头文件,定义如下宏: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  9. OC中的宏定义

    我们都知道,宏定义是编译期常量.而OC是一种动态语言. 1.iOS系统版本判断的两个宏定义 __IPHONE_OS_VERSION_MAX_ALLOWED // iOS系统版本最大允许 __IPHON ...

  10. iOS 之单例,代理,通知,KVO,Block全能解析

    //单例 //.h + (Instannce *)shareInstance; //.m static Instannce *instance = nil; @implementation Insta ...

随机推荐

  1. Excel加载宏.xla文件的使用方法

    将文件保存到本地的一个位置. 2.打开任意的excel表格,并按照如下的图片所示的步骤操作: 1)点击development(开发工具)add-ins浏览,然后找到刚刚文件的保存位置并选择文件(如果没 ...

  2. java 中的equals hashCode

    简介 hashCode 与 equals 应该有等同性,如果A equals B 那么 A 和 B 的hashCode 应该一样 还有toString方法可以在后期调试的过程中起到很好的作用 code ...

  3. ICEE-eFuse电子保险丝

    eFuse的原理是以测量电压(已知高精密电阻分压分流网络上的)和内部高精密参考电压, 经过ADC变换成数字信号,通过计算来精准检测电流电压, 并且在电流超过设计限值时,通过场效应晶体管 (FET) 切 ...

  4. 使用mysql恢复数据时视图变成表 -九五小庞

    ** 问题是这样的,使用mysqldump备份线上数据库之后,然后通过mysql 命令行恢复到线下数据库,发现视图都成了表. **为什么会这样呢?这就得聊聊mysql备份恢复的机制了其实查看mysql ...

  5. IntelliJ IDEA插件IDE Feature Trainer

    这个插件就是个关于IDEA的一些基础快捷键教学,很多快捷键都还没有,比如Ctrl+Alt+← 编辑器基础(Editor Basics) 选择,删除,复制,移动行,收缩和展开代码. Ctrl+Shift ...

  6. 利用Transformer模型提升产品检索效果

    利用Transformer模型提升产品检索效果 当顾客点击产品搜索结果列表中的某个商品时,暗示该商品优于未点击项.传统"学习排序"模型通过比较点击/未点击结果的"成对比较 ...

  7. Golang 基础之数据类型梳理

    大家好,将梳理出的 Go语言数据类型内容,分享给大家. 请多多指教,谢谢. 类型汇总 Go 语言中,主要分为值类型主要分为三部分: 整型.浮点型和其他类型. // 整型 int int8 int16 ...

  8. J1939传输协议功能

    目录 一.报文的拆装和重组 1.1 数据包的序列号 1.2 数据包的拆装 1.3 数据包的重组 二.传输协议连接管理中的报文类型 2.1 连接模式下的请求发送报文 TP.CM_RTS 2.2 连接模式 ...

  9. 解锁音频创作新可能:AI 人声伴奏分离神器 Replay 深度解析

    在音频创作.编辑以及日常娱乐的世界里,我们常常会遇到这样的难题:想要某首歌曲的纯净伴奏用于翻唱,或是想从一段视频中提取清晰人声素材,传统方法要么复杂繁琐,要么效果差强人意.不过,现在有了一款名为Rep ...

  10. TinyMCE5 测试

    段落格式 博客园 创建于 2004 年 1 月,博客园诞生于江苏扬州这样一个 IT 非常落后的小城市,城市虽小,但是这里却有很多求知创新的人,博客园诞生的理由是如此简单. 一个IT技术人员想为IT技术 ...