黑马程序员技术交流社区
标题:
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实现应该是一致的,所以解释如下:
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函数来分配内存实际的所需空间。
作者:
Jine
时间:
2014-5-8 21:56
NSObject *object=[[NSObject alloc]init];
NSLog(@"%ld",sizeof(object));
这是我在网上找到的代码,应该可以计算出为子类开辟出的存储空间!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2