黑马程序员技术交流社区

标题: alloc分配内存大小问题 [打印本页]

作者: 张海龙重新起航    时间: 2014-5-8 14:17
标题: alloc分配内存大小问题
OC中所有的类都继承自NSObject,NSObject实现了alloc函数,而NSObject的子类调用NSObject的alloc函数时,应该是自动分配内存,是不是先存放信息的首地址?怎么知道要给这个子类分配多大的内存空间呢?

作者: Freedam    时间: 2014-5-8 19:39
这个是alloc的内部实现吧,文档上没有这个函数的实现,苹果官网上也没公开foundation框架的源码实现,我在网上找到了GNUstep的实现,听说它和cocoa的实现一致所以应该和苹果的foundation下的alloc实现应该是一致的,所以解释如下:
  1. struct obj_layout {
  2.     NSUInteger retained;
  3. };
  4. + (id) alloc
  5. {
  6.     int size = sizeof(struct obj_layout) + 对象大小;
  7.     struct obj_layout *p = (struct obj_layout *)calloc(1,size);
  8.     return (id)(p+1);
  9. }

复制代码

struct obj_layout 结构体中的retained保存了引用计数也就是头部信息,这个方法的实现的确是将信息存在首地址上这个信息是引用计数。至于给对象分配的内存大小它的内部又调用了NSZoneMalloc函数来分配内存实际的所需空间。
作者: Jine    时间: 2014-5-8 21:56
NSObject *object=[[NSObject alloc]init];

NSLog(@"%ld",sizeof(object));

这是我在网上找到的代码,应该可以计算出为子类开辟出的存储空间!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2