
C语言的数组有动态数组和静态数组两种。
1 静态数组。
对于静态数组,无法新增加数组成员数量。
所以一定要最初始定义足够大的数组,然后可以用一个整型变量维护数组中现有成员个数,再动态增加实际成员个数。
比如
int a[1000]int n = 0
while(scanf("%d",&a[n]) != EOF) n ++
这样的代码就可以实现增加数组成员数的类似效果。n为实际成员个数。
2 动态数组。
动态数组是可以随时改变数组成员个数的。不过为了确定当前数组个数,需要用两个整型变量来保存最大成员数,和已有成员数,这样就可以在不够的时候进行扩大。
int n = 0, size = 100 //n为当前元素个数,size为数组大小,初始为100.int *a = NULL//数组指针。
a = (int *)malloc(sizeof(int) * size) // 初始分配100个元素。
while(scanf("%d",&a[n]) != EOF)
{
n++
if(n >= size)//空间不足。
{
size+=100//增加100个元素空间。
a = (int *)realloc(sizeof(int)*size, a)//重新分配空间。
}
}
在上一篇KVO的实现中用到了动态的创建类,添加成员变量等方法,这一篇说说这些方法的使用。
父类Person
1.动态的创建一个类,用到了下面这个方法:
为这个新创建的类添加方法和成员变量,并且注册这个类。
2.添加成员变量
返回YES,添加成功,返回NO,添加失败,说明该类中已经存在这个名称。它的调用是在 objc_allocateClassPair 之后, objc_registerClassPair 之前,给一个存在的类添加实例变量是不允许的。
我们尝试着给Person添加address
3.添加方法
通过 class_addMethod(Class cls, SEL name, IMP imp, const char *types) 方法添加,参数依次为:添加方法的类,方法名,方法实现,方法参数的描述。
通过这个方法会重写父类的实现,需要改变本类方法实现,通过方法 method_setImplementation .
打印结果:
4.重写本类中的方法
通过方法 method_setImplementation(Method m, IMP imp) 返回类型 IMP ,方法m之前的实现.
打印结果:
在调用study的方法的时候打印的是play的结果,调换了方法的实现。 method_exchangeImplementations(Method m1, Method m2) ,可能也是通过这种方法实现m1,m2的交换。
5.添加属性
打印结果
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)