这个是alloc的内部实现吧,文档上没有这个函数的实现,苹果官网上也没公开foundation框架的源码实现,我在网上找到了GNUstep的实现,听说它和cocoa的实现一致所以应该和苹果的foundation下的alloc实现应该是一致的,所以解释如下:
- struct obj_layout {
- NSUInteger retained;
- };
- + (id) alloc
- {
- int size = sizeof(struct obj_layout) + 对象大小;
- struct obj_layout *p = (struct obj_layout *)calloc(1,size);
- return (id)(p+1);
- }
复制代码
struct obj_layout 结构体中的retained保存了引用计数也就是头部信息,这个方法的实现的确是将信息存在首地址上这个信息是引用计数。至于给对象分配的内存大小它的内部又调用了NSZoneMalloc函数来分配内存实际的所需空间。 |