1.调用release就一定会释放该对象的内存吗?
release的调用只会使引用计数-1,只有当引用计数为0时,调用了dealloc方法,这个对象才是真正的被释放。
2.alloc、new、copy创建对象有什么区别?
1、[[ObjectName alloc] init];
2、[ObjectName new];
3、[ObjectName copy];
1.alloc是使用zone,但是zone主要的作用是优化内存的利用率,我们给对象在堆中分配内存是会造成内存的碎片化的,zone是在我们申请创建对象时根据所需空间大小给对象的内存分区,大内存的对象放在同一个区域,小内存的对象放在同一个区域,这样就回大大减少内存碎片化的几率,提高了内存的利用率。
2.使用new来创建对象的话, 初始化方法被固定死了, 只能使用init, 不能调用其他的initWith方法;
3.使用alloc init方法, 我们可以重写init方法。引用计数为1。
4.copy对象,源对象引用计数不变,新创建一个对象,引用计数为1。如果是不可变对象则为浅复制,可变对象为深复制。
3.arc是如何自动释放或者获取对象的?
???
编译时在合适的地方插入 retain release?
使用了强指针,弱指针解决循环持有的问题?
4.你了解的alloc、new、copy都是获取使用权,但是为什么又要说使用retain来获取对象的使用权?
当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息时,持有计数数值会+1。
5.dealloc什么时候调用?
对象的引用计数 为0的时候。
6.内存是如何分配的,堆内存跟栈内存的区别
https://blog.csdn.net/abcjennifer/article/details/39780819