前言
做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger
,NSObject
,NSString
这些对象是怎么封装的?接下来我们就使用C语言来一部一部的实现这个封装。
Object对象
首先我们先封装一个Object
对象,我们来分析一下:
- 如果使用C来封装对象,我们就要用到结构体
- 每一个
Object
都有一个计数器,这个计数器用来管理对象的释放 - 提供一定的方法,能够retain, release, 获取计数器个数
好了,基于上边的设计呢,我们写了如下的代码:
Object.h
#include "Object.h"
// 定义Object对象
typedef struct Object {
int retainCount;
}Object;
//宏定义方法 方便书写
#define OBJECTRETAIN(obj) objectRetain((Object*)obj)
#define OBJECTRELEASE(obj) objectRelease((Object*)obj)
#define GETRETAINCOUNT(obj) getRetainCount((Object*)obj)
void objectRetain(Object *obj);
void objectRelease(Object *obj);
int getRetainCount(Object *obj);
接下来,我们只要在.c中实现这三个方法就行了。
Object.c
#include "Object.h"
#include <stdlib.h>
void objectRetain(Object *obj) {
obj -> retainCount += 1;
}
void objectRelease(Object *obj) {
obj -> retainCount -= 1;
if (obj -> retainCount <= 0) {
free(obj);
}
}
int getRetainCount(Object *obj) {
return obj -> retainCount;
}
String对象
我们使用C语言的char *来封装String
对象:
String.h