在面向对象语言中, 对象是程序运行时实际存在的数据, 而类不是. 我们要先把类实例化,初始化然后才能使用对象.
实例化:就是告诉运行时按照类的定义为对象分配内存, 返回内存指针;
对象的内存大小=父类的内存大小+自己的实例变量需要的内存大小, 指针是4B, 父类的内存大小最小是4B, 就是NSObject的唯一实例变量isa指针需要的内存空间.
初始化: 就是将对象的变量赋初始值;
这类实例化好理解, 可是为什么初始化呢?
初始化就是将实例变量清0, 因为分配内存并不能保证内存中的值是什么, 具有不确定性, 要求初始化是为了让程序员显式地让实例变量具有确定的值. 注意,isa实例变量的值不会被清零, 因为它已经被运行时自动赋值为"类对象"的内存地址.
同时, 对于对象我们要求他具有独特的状态(实例变量), 而最好不是默认初始化的空值,或者0; 所以, 最好使用带有参数的初始化方法(initWith).
类对象: 由编译器按照类的声明将其载入内存(在stack中), 可以用来创建新的对象(在Heap中), 或者用来接收消息执行类方法; 同一类的所有对象指向同一个类对象.