黑马程序员技术交流社区

标题: 在oc中类的存储空间是什么时候分配的? [打印本页]

作者: 杨勇    时间: 2014-4-25 14:20
标题: 在oc中类的存储空间是什么时候分配的?
本帖最后由 杨勇 于 2014-4-25 23:20 编辑

这里对我的问题进行简单的说明:
@interface Student : NSObject
{
    int _age;
}
- (void)test;
@end

@implementation Student
- (void)test
{

}
@end

int main()
{
    Student *s=[Student new];
    return 0;
}

如上描述,设计了一个学生类,我知道在Student *s=[Student new];这里,创建了一个新的类的对象,并为对象分配了存储空间,请问student这个类是在什么时候加载到内存的,是在创建对象的同时?对类进行声明的时候,还是类进行定义(实现)的时候?谢谢!
作者: 魅影穿眸    时间: 2014-4-25 18:43
类没有分配存储空间,只有创建对象的时候才分配才分配存储空间的
作者: 2的狠正经    时间: 2014-4-25 19:01
对象 是存放在 堆里面的, 在new的时候分配的
作者: 杨勇    时间: 2014-4-25 22:44
2的狠正经 发表于 2014-4-25 19:01
对象 是存放在 堆里面的, 在new的时候分配的

一般对象的方法和类方法是存放在类里的,视频里讲也会给类分配存储空间,请问类是什么时候分配的空间?谢谢!
作者: 杨勇    时间: 2014-4-25 22:46
魅影穿眸 发表于 2014-4-25 18:43
类没有分配存储空间,只有创建对象的时候才分配才分配存储空间的

不是对象方法和类方法都存储在类中么?能不能解释的详细点,谢谢!
作者: 2的狠正经    时间: 2014-4-26 00:13
内存分为5大区域,其中有两块区域, 一块是堆, 一块是栈
栈里面放的是局部变量, 里面的变量是系统自动回收的
堆里面放的是动态产生的变量,
例如 Student *s = [[Srudeng alloc] inti]中
*s就是存放在栈中, 新对象是放在堆中的, s中放的是新对象的地址
每一个对象默认有一个*isa指针, 它指向了类中的方法,
希望对你有帮助,




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