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 ...
随机推荐
- Go 重构案例分享:订单创建逻辑重构
背景:从 PHP (Laravel) 到 Go 的模式迁移 •原 PHP (Laravel) 实现思路:核心模式: "行为管道" (Behavior Pipeline).如何工作: ...
- iOS开发网络篇—实现一个视频播放客户端小应用(一)
iOS开发网络篇-实现一个视频播放客户端小应用(一) 一.初步实现(完成tableview的基本数据展示) 1.前提说明 已经搭建了本地服务器,在本地服务器中存放了视频信息等资源. 服务器的资源 2. ...
- FT 面试 记录
冬天的时候呼气呼到玻璃上,出现水雾的质量?? 我们简单的算了一下 是 40mg
- Tensorflow 初步接触
Tensorflow 初步接触 机器学习 google的开源框架吧 第一个学习步骤中文的tensorflow教程 第一个py #coding=utf-8 import input_data impor ...
- jz2440 环境搭建
2.搭建三者互通 1.搭建TFTP服务 这两点搞定基本可以飞奔了 记录一下 配置 板子的ip ifconfig eth3 IP地址 不用重启network服务因为也没有这个服务 当然虚拟机里面的一样 ...
- java 聊天 两个进程互相通信开两个线程
简介 RT code server package com.kuang; import java.io.BufferedReader; import java.io.IOException; impo ...
- java 拖拽矩形
简介 java 拖拽矩形 code import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.ut ...
- Web前端入门第 79 问:JavaScript async & await 的异步任务进化之路
JS 中异步任务随处可见,比如: 1.用户交互的点击.输入 2.网络请求的 fetch.ajax.WebSocket 3.资源中的图片.脚本加载 4.定时任务 setTimeout.setInterv ...
- SciTech-Mathematics-PAS概率统计-多学多用MATLAB就非常的好-Distribution分布-Binomial + Poisson +
https://ww2.mathworks.cn/help/stats/poisson-distribution.html https://ww2.mathworks.cn/help/stats/bi ...
- AI=模型算法+数据? AI={模型算法, 数据, 算力} ∪ {人才,资本,政策}∪ {方法论,世界观,思想}
AI={模型算法, 数据, 算力}∪{人才,资本,政策}∪ {生活方式,运营} ∪{方法论,世界观,思想}