浅谈——用宏封装单例
来源:互联网 发布:sql 注入 php 提权 编辑:程序博客网 时间:2024/06/15 22:15
//
// Single.h
// 单例模式
//
// Created by lisilong on 15/8/18.
// Copyright © 2015年 longshao. All rights reserved.
//
// 判断当前是否时ARC
// 注意点:
// 1.单例是不可以继承的,如果继承引发问题
// * 如果先创建父类,那么永远都是父类
// * 如果先创建子类,那么永远都是子类
// 说明:
// 1.调用allocWithZone:方法,给对象分配内存空间;
// 2.retainCount方法返回-1,或无限大MAXFLOAT只是让别的程序员一块便知道你这是一个单利对象。
/** 类的声明部分 */
#define SingleInterface(name) + (instancetype)share##name
/** 类的实现部分 */
#if __has_feature(objc_arc)
// ARC
#define SingleImplement(name) + (instancetype)share##name \
{ \
return [[self alloc] init]; \
} \
+ (instancetype)allocWithZone:(struct _NSZone *)zone \
{ \
static id instance; \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
instance = [super allocWithZone:zone]; \
}); \
return instance; \
} \
- (nonnull id)copyWithZone:(nullable NSZone *)zone \
{ \
return self; \
} \
- (id)mutableCopyWithZone:(nullable NSZone *)zone \
{ \
return self; \
}
#else
// MRC
#define SingleImplement(name) + (instancetype)share##name \
{ \
return [[self alloc] init]; \
} \
+ (instancetype)allocWithZone:(struct _NSZone *)zone \
{ \
static id instance; \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
instance = [super allocWithZone:zone]; \
}); \
return instance; \
} \
- (nonnull id)copyWithZone:(nullable NSZone *)zone \
{ \
return self; \
} \
- (id)mutableCopyWithZone:(nullable NSZone *)zone \
{ \
return self; \
} \
- (oneway void)release \
{} \
- (instancetype)retain \
{ \
return self; \
} \
-(NSUInteger)retainCount \
{ \
return MAXFLOAT; \
}
#endif
- 浅谈——用宏封装单例
- 浅谈设计模式——单例模式
- 黑马程序员——浅谈java中的单例模式
- 浅谈JavaScript设计模式——单例模式
- 浅谈Java设计模式—-单例模式
- iOS设计模式之—单例模式浅谈
- iOS 宏~单例封装宏
- sqlite单例封装
- AFNetworking封装单例
- okHttp单例封装
- 浅谈单例模式
- 浅谈单例模式
- 单例模式浅谈
- 浅谈单例模式
- iOS 单例浅谈
- 浅谈单例模式
- 单例模式浅谈
- 浅谈单例模式
- 题目:寻找缺失的数
- POJ 1064 Cable master (二分查找_经典题!!!)
- 最小生成树之Prime算法(基于优先队列)
- onLowMemory()与onTrimMemory()
- 编写struts.xml文件时提示帮助信息
- 浅谈——用宏封装单例
- 关于四边形各种形状的判断
- 极光推送基本写法
- Xcode插件
- 析构函数使用不当造成操作野指针程序coredump
- 终于搭建成功Xamarin for Android平台
- 【UIKit-124-10】#import <UIKit/UIView.h>
- 将一个用for循环实现的流水灯C程序模块化
- is a 与 has a的区别