ios oc单例宏定义
#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单例宏定义的更多相关文章
- 完美单例宏定义(兼容ARC和MRC),项目中可以直接使用
单例模式: 1.永远只分配一块内存来创建对象 2.提供一个类方法, 返回内部唯一的一个对象(一个实例) 3.最好保证init方法也只初始化一次 写一个宏定义文件,传入宏定义函数名,自动生成符合类名的 ...
- iOS快速单例宏
// 单例 #define DECLARE_SHARED_INSTANCE(className) \ + (className *)sharedInstance; #define IMPLEMENT_ ...
- iOS单例 宏定义
#define singleton_interface(className) \ + (className *)shared##className; // @implementation #defin ...
- iOS - 单例传值 (一)
点击打开链接 iOS - 单例传值 (二) 单例只会对某个类实例化一次/单例类,对单例这个类实例化一次有且仅有一个对象 你单例初始化,只能初始化一次,然后你指向的对象,其实都是指向一个内存地址, ...
- iOS开发经常使用宏定义
iOS开发经常使用宏定义 iOS开发中经常须要获取屏幕宽度高度,为view设置颜色,为imgagView设置图片等,我们都可定义一些宏,随时都可拿来使用,方便开发 <span style=&qu ...
- [iOS]封装单例类
[iOS]封装单例类 今天在学习iOS的SQLite开发,发现在需要使用SQLite的每个视图中,都需要对数据库进行打开或关闭,觉得挺麻烦的:于是在想能否写个单例类对这些操作进行封(因以前一直在使用D ...
- iOS登录单例
iOS登录单例 一,工程图. 二,代码. UserInfo.h #import <Foundation/Foundation.h> @interface UserInfo : NSObje ...
- 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 ...
- OC中的宏定义
我们都知道,宏定义是编译期常量.而OC是一种动态语言. 1.iOS系统版本判断的两个宏定义 __IPHONE_OS_VERSION_MAX_ALLOWED // iOS系统版本最大允许 __IPHON ...
- iOS 之单例,代理,通知,KVO,Block全能解析
//单例 //.h + (Instannce *)shareInstance; //.m static Instannce *instance = nil; @implementation Insta ...
随机推荐
- Excel加载宏.xla文件的使用方法
将文件保存到本地的一个位置. 2.打开任意的excel表格,并按照如下的图片所示的步骤操作: 1)点击development(开发工具)add-ins浏览,然后找到刚刚文件的保存位置并选择文件(如果没 ...
- java 中的equals hashCode
简介 hashCode 与 equals 应该有等同性,如果A equals B 那么 A 和 B 的hashCode 应该一样 还有toString方法可以在后期调试的过程中起到很好的作用 code ...
- ICEE-eFuse电子保险丝
eFuse的原理是以测量电压(已知高精密电阻分压分流网络上的)和内部高精密参考电压, 经过ADC变换成数字信号,通过计算来精准检测电流电压, 并且在电流超过设计限值时,通过场效应晶体管 (FET) 切 ...
- 使用mysql恢复数据时视图变成表 -九五小庞
** 问题是这样的,使用mysqldump备份线上数据库之后,然后通过mysql 命令行恢复到线下数据库,发现视图都成了表. **为什么会这样呢?这就得聊聊mysql备份恢复的机制了其实查看mysql ...
- IntelliJ IDEA插件IDE Feature Trainer
这个插件就是个关于IDEA的一些基础快捷键教学,很多快捷键都还没有,比如Ctrl+Alt+← 编辑器基础(Editor Basics) 选择,删除,复制,移动行,收缩和展开代码. Ctrl+Shift ...
- 利用Transformer模型提升产品检索效果
利用Transformer模型提升产品检索效果 当顾客点击产品搜索结果列表中的某个商品时,暗示该商品优于未点击项.传统"学习排序"模型通过比较点击/未点击结果的"成对比较 ...
- Golang 基础之数据类型梳理
大家好,将梳理出的 Go语言数据类型内容,分享给大家. 请多多指教,谢谢. 类型汇总 Go 语言中,主要分为值类型主要分为三部分: 整型.浮点型和其他类型. // 整型 int int8 int16 ...
- J1939传输协议功能
目录 一.报文的拆装和重组 1.1 数据包的序列号 1.2 数据包的拆装 1.3 数据包的重组 二.传输协议连接管理中的报文类型 2.1 连接模式下的请求发送报文 TP.CM_RTS 2.2 连接模式 ...
- 解锁音频创作新可能:AI 人声伴奏分离神器 Replay 深度解析
在音频创作.编辑以及日常娱乐的世界里,我们常常会遇到这样的难题:想要某首歌曲的纯净伴奏用于翻唱,或是想从一段视频中提取清晰人声素材,传统方法要么复杂繁琐,要么效果差强人意.不过,现在有了一款名为Rep ...
- TinyMCE5 测试
段落格式 博客园 创建于 2004 年 1 月,博客园诞生于江苏扬州这样一个 IT 非常落后的小城市,城市虽小,但是这里却有很多求知创新的人,博客园诞生的理由是如此简单. 一个IT技术人员想为IT技术 ...