1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #ifdef SHOULD_COMPILE_LOOKIN_SERVER
- //
- // LKS_ObjectRegistry.m
- // LookinServer
- //
- // Created by Li Kai on 2019/4/21.
- // https://lookin.work
- //
- #import "LKS_ObjectRegistry.h"
- #import <objc/runtime.h>
- @interface LKS_ObjectRegistry ()
- @property(nonatomic, strong) NSPointerArray *data;
- @end
- @implementation LKS_ObjectRegistry
- + (instancetype)sharedInstance {
- static dispatch_once_t onceToken;
- static LKS_ObjectRegistry *instance = nil;
- dispatch_once(&onceToken,^{
- instance = [[super allocWithZone:NULL] init];
- });
- return instance;
- }
- + (id)allocWithZone:(struct _NSZone *)zone{
- return [self sharedInstance];
- }
- - (instancetype)init {
- if (self = [super init]) {
- self.data = [NSPointerArray weakObjectsPointerArray];
- // index 为 0 用 Null 填充
- self.data.count = 1;
- }
- return self;
- }
- - (unsigned long)addObject:(NSObject *)object {
- if (!object) {
- return 0;
- }
- [self.data addPointer:(void *)object];
- return self.data.count - 1;
- }
- - (NSObject *)objectWithOid:(unsigned long)oid {
- if (self.data.count <= oid) {
- return nil;
- }
- id object = [self.data pointerAtIndex:oid];
- return object;
- }
- @end
- #endif /* SHOULD_COMPILE_LOOKIN_SERVER */
|