例:Person *p1 = [Person new];
-
Person *p1;
会在栈内存中申请一块空间,在栈内存中声明1个Person类型的指针变量p1。p1是一个指针变量,那么只能存储地址。 -
[person new];
真正在内存中创建对象的其实是这句代码。 - new方法在堆内存中创建一块合适大小的空间,然后在空间中根据类的模板创建对象。
类模板中定义了什么属性,就把这些属性依次声明在对象之中。
对象中还有另外一个属性,叫做isa
,是一个指针,指向对象所属的类在代码段中的地址。(类中的isa
指向父类) - 初始化对象的属性,给对象的属性赋默认值。
如果属性的类型是基本数据类型,那么就赋值为0
。
如果属性的类型是c语言的指针类型,那么就赋值为NULL
。
如果属性的类型为OC语言的类指针类型,那么就赋值为nil
。 - 注意
1). 对象中只有属性没有方法,属性包括自己类的属性,外加一个isa指针指向代码段中的类。
2). 如何访问对象的属性,指针名->属性名
根据指针,找到指针指向的对象,在找到对象中的属性来访问。
3). 如何调用方法。[指针名 方法名];
先根据指针名找到对象,对象发现要调用方法,在根据对象的isa
指针找到类。然后调用类里的方法。
4). 为什么不把方法存储到对象之中。
因为每一个对象的方法的代码实现都是一模一样的,没有必要为每一个对象都保存一个方法,这样的话就太浪费空间了,既然都一样,那么就只保存一份在代码段中。
5). 对象属性是有默认值的。
参考: OC-基础总结(一)