9.5问题总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值