【5】ios面试题--内存管理

【5】ios面试题--内存管理

ID:36213069

大小:131.33 KB

页数:12页

时间:2019-05-07

【5】ios面试题--内存管理_第1页
【5】ios面试题--内存管理_第2页
【5】ios面试题--内存管理_第3页
【5】ios面试题--内存管理_第4页
【5】ios面试题--内存管理_第5页
资源描述:

《【5】ios面试题--内存管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.属性readwrite,readonly,assign,retain,copy,nonatomic,atomic各是什么作用,在那种情况下用?readwrite是可读可写特性;需要生成getter方法和setter方法时使用readonly是只读特性 只会生成getter方法不会生成setter方法 ;不希望属性在类外改变assign是赋值特性,不涉及引用计数,弱引用,setter方法将传入参数赋值给实例变量;仅设置变量时;retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;copy表示拷贝特性,

2、setter方法将传入对象复制一份;需要完全一份新的变量时。nonatomic非原子操作,不加同步,多线程访问可提高性能,但是线程不安全的。决定编译器生成的settergetter是否是原子操作。atomic原子操作,同步的,表示多线程安全,与nonatomic相反2.Differencebetweenshallowcopyanddeepcopy?浅复制和深复制的区别?浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存

3、资源,复制的只不过是一个指针,对象本身资源。对于深复制来说,A和A_copy指向的是两个不同的内存资源,他们是两份独立对象本身。用网上一哥们通俗的话将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。3.什么是栈内存(stack)?什么是堆内存(heap)?栈内存:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(先进后出)。在内存中占连续的空间,紧密依次排列,效率很高,要优于堆内存,但是分配容量有限。在IOS开发中,栈内存里主要存放的是任何C类型,如int、sho

4、rt、char、long、struct、enum等基本数据类型或者结构体。堆内存:也叫散列堆,在运行的过程中动态内存分配。需要在创建对象的时候通过alloc开辟空间,不用的时候需要release释放,因为开辟的空间的时候不不是完全连续的,所以会出现内存碎片,需要我们管理。此外,如果我们动态的申请了内存,使用结束后没有释放,就会发生内存泄露。堆内存主要存储继承自NSObject类的所有OC对象。4.IOS开发内存管理的对象有哪些?不管理的有哪些?内存管理的对象为继承自NSObject类的所有OC对象,也就是存在堆内存中的数据,也叫引用类型。不需要管理的对象为

5、任何C类型,如int、short、char、long、struct、enum等基本数据类型或者结构体,它们存放在栈内存中,也叫值类型。OC主要管理的是堆内存,栈内存自动管理。5.什么是引用类型?什么是值类型?它们之间可以相互转化么?引用类型就是继承NSObject类的类型。值类型就是C中基本数据类型。引用类型和值类型之间可以进行相互的转化,比如NSNumber与int,两者就可以转化:NSNumbernumber=[NSNumbernumberWithInt:1];intnum=[numberintValue];6.什么是装箱(boxing)?什么是拆箱(

6、unboxing)?把值类型转为引用类型,叫装箱,也叫向上转型。把引用类型转为值类型,叫拆箱,也叫向下转型。7.装箱和拆箱会造成什么问题?装箱,向上转型,会造成性能损失。拆箱,向下转型,会造成安全性问题。8.Objective-C如何对内存管理的,说说你的看法和解决方法?内存管理,就是对内存资源进行优化。Objective-C的内存管理主要有三种方式ARC(自动内存计数)、MRC(手动内存计数)、内存池。ARC现在用的比较广泛,它可以简化我们的代码,不用担心内存泄露。(补充解释三种方式,参见后面题目)9.MRC是什么?它的管理原则是什么?管理不好会出现什么

7、问题?MRC,全称MannulReferenceCounting,手动内存管理(手动引用计数),需要程序员手动的创建对象申请内存,然后再手动的释放。MRC管理内存的原则:谁创建,谁释放。也就是说,在使用的过程中,谁retain,谁release;或者谁alloc,谁release。在使用MRC时,当引用计数为0时,必须回收,引用计数不为0,则不回收;如果内存计数为0了,没回收,会造成内存泄露。如果想使用已经创建好的某个对象(别人创建的),不能直接拿过去用,需要先retain(让计数+1),用完之后应该release(计数-1),否则会造成野指针。10.什么

8、是野指针?如何避免野指针?野指针(不知道指向哪里的指针),它指向了

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。