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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

// .h文件的实现

#define SingletonH(methodName) + (instancetype)shared##methodName;

// .m文件的实现

#if __has_feature(objc_arc) // 是ARC

#define SingletonM(methodName) \

static id _instace = nil; \

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

{ \

if (_instace == nil) { \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instace = [super allocWithZone:zone]; \

}); \

} \

return _instace; \

} \

\

- (id)init \

{ \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instace = [super init]; \

}); \

return _instace; \

} \

\

+ (instancetype)shared##methodName \

{ \

return [[self alloc] init]; \

} \

+ (id)copyWithZone:(struct _NSZone *)zone \

{ \

return _instace; \

} \

\

+ (id)mutableCopyWithZone:(struct _NSZone *)zone \

{ \

return _instace; \

}

#else // 不是ARC

#define SingletonM(methodName) \

static id _instace = nil; \

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

{ \

if (_instace == nil) { \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instace = [super allocWithZone:zone]; \

}); \

} \

return _instace; \

} \

\

- (id)init \

{ \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instace = [super init]; \

}); \

return _instace; \

} \

\

+ (instancetype)shared##methodName \

{ \

return [[self alloc] init]; \

} \

\

- (oneway void)release \

{ \

\

} \

\

- (id)retain \

{ \

return self; \

} \

\

- (NSUInteger)retainCount \

{ \

return 1; \

} \

+ (id)copyWithZone:(struct _NSZone *)zone \

{ \

    return _instace; \

} \

 \

+ (id)mutableCopyWithZone:(struct _NSZone *)zone \

{ \

    return _instace; \

}

#endif

然后在你定义单例类的

.h 文件 写 SingletonH(MyMethodName)

.m 文件写 SingletonM(MyMethodName)

搞定!

时间: 2024-10-20 02:20:04

OC单例快速实现的相关文章

oc单例

转自:http://www.2cto.com/kf/201412/362291.html 单例模式在iOS开发中可能算是最常用的模式之一了,但是由于oc本身的语言特性,想要写一个正确的单例模式相对来说比较麻烦,这里我就抛砖引玉来聊一聊iOS中单例模式的设计思路.关于单例模式更多的介绍请参考这篇文章. 单例顾名思义就是说一个类的实例只能有一个,在java.C++这类语言中,可以通过将构造函数私有化来避免对象的重复创建,但是objective-c却不能够这样做,我们需要通过其他机制来达到这个目的.一

OC单例详解

单例(singleton) 实现单例模式有三个条件: 类的构造方法是私有的 类提供一个类方法用于产生对象 类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 类的构造方法是私有的我们只需要重写allocWithZone方法,让初始化操作只执行一次 类提供一个类方法产生对象这个可以直接定义一个类方法 类中有一个私有的自己对象我们可以在.m文件中定义一个属性即可 可以保证在程序运行过程,一个类只有一个实例 应用场景 某个类经常被使用(节约系统资源) 定义工具类 共享数据 注意点 不要继

OC -- 单例设计模式

#import <Foundation/Foundation.h> @interface Person : NSObject + (instancetype)sharePerson; @end @implementation Person + (instancetype)sharePerson{ Person *p = [[Person alloc] init]; return p; } static Person *_instance; + (instancetype)allocWithZo

OC 单例

1利用GCD方式实现单例(ARC) #import "People.h" @implementation People static id _instace; +(id)allocWithZone:(struct _NSZone *)zone{ //为防止用alloc创建对象 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace=[super allocWithZone:zone]; })

OC单例概念以及样例

单例: 一个类中在整个程序只会创建一个对象,这个单例对象的数据是整个程序所有的文件所有的函数可以共享.和全局变量类似 NSFileManagerUIApplication //函数开头 defaultXXXX或者 sharedXXX 非标准单例 + (MyPlane *)defaultPlane{     static MyPlane * plane = nil;     @synchronized(self){         if (!plane) {             plane =

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]; \ } \ + (__cl

OC 单例实现

2. 在.h 文件遵循 <NSCopying,NSMutabalecopying> 原文地址:https://www.cnblogs.com/qingzZ/p/9258902.html

OC &amp; Swift 单例

1. OC 单例 + (NetworkTool *)sharedNetworkTool { static id instace; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instace = [[self alloc] init]; }); return instace; } 2. Swift 单例 private static let instance = NetworkTool() class func sh

oc快速生成单例头文件解析

// .h文件 #define HMSingletonH(name) + (instancetype)shared##name; // .m文件 #if __has_feature(objc_arc) #define HMSingletonM(name) static id _instace; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToke