iOS技术面试02:内存管理
- 怎么保证多人开发进行内存泄露的检查. 如何定位内存泄露?
1> 使用Analyze进行代码的静态分析(检测有无潜在的内存泄露)
2> 通过leak检查在程序运行过程中有无内存泄露
3> 为避免不必要的麻烦, 多人开发时尽量使用ARC
2.非自动内存管理情况下怎么做单例模式.
创建单例设计模式的基本步骤 ·
>声明一个单件对象的静态实例,并初始化为nil。
>创建一个类的类工厂方法,当且仅当这个类的实例为nil时生成一个该类的实例
>实现NScopying协议, 覆盖allocWithZone:方法,确保用户在直接分配和初始化对象时,不会产 生另一个对象。
>覆盖release、autorelease、retain、retainCount方法, 以此确保单例的状态。
>在多线程的环境中,注意使用@synchronized关键字或GCD,确保静态实例被正确的创建和初始化。
3.对于类方法(静态方法)默认是autorelease的。所有类方法都会这样吗?
1> 系统自带的绝大数类方法返回的对象,都是经过autorelease的
4.block在ARC中和MRC中的用法有什么区别,需要注意什么
1.不管是ARC和MRC,block都应该用copy操作来持有
- 应注意避免循环引用
1> ARC: __weak、__unscafe_unretained
2> MRC:__block
5.什么情况下会发生内存泄漏和内存溢出?
1> 内存泄露:该释放的没有释放。内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存泄露最终会导致内存溢出!
2> 内存溢出:内存满了,不够用
当程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个int,但给它存了long才能存下的数,那就是内存溢出。
6.[NSArray arrayWithobject:<id>] 这个方法添加对象后,需要对这个数组做释放操作吗?
不需要 这个对象被放到自动释放池中
7.Json数据的解析,和解析数据的时候有内存泄露吗?有的话 如何解
1> JSON解析的方案
l SBJson
l JSONkit
l NSJSONSerialization
2> 内存泄漏么?
8. 自动释放池底层怎么实现
自动释放池以栈的形式实现:当你创建一个新的自动释放池时,它将被添加到栈顶。当一个对象收到发送autorelease消息时,它被添加到当前线程的处于栈顶的自动释放池中,当自动释放池被回收时,它们从栈中被删除, 并且会给池子里面所有的对象都会做一次release操作.
9增加一个APP的内存占用的行为:
创建一个OC对象;
定义一个变量;
调用一个函数或方法
内存过大,系统可能会强制关闭APP。造成闪退现象,就是APP突然崩溃退出的意思,影响用户体验。
***只有OC对象才需要进行内存管理的本质原因:
OC对象存放于堆里面,非OC对象一般放在栈里面,系统会自动回收栈内存
iOS技术面试02:内存管理的更多相关文章
- iOS技术面试01:多线程与网络
1. 多线程的底层实现? 1> 首先搞清楚什么是线程.什么是多线程.多线程的使用场合(线程有时被称为轻量级进程,是程序执行流的最小单元.多线程是指软件或者硬件实现多个线程并发执行的技术.多线程的 ...
- iOS 下ARC的内存管理机制
本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...
- iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码
最近接了个小任务,和公司的iOS小伙伴们分享下instruments的具体使用,于是有了这篇博客...性能优化是一个很大的话题,这里讨论的主要是内存泄露部分. 一. 一些相关概念 很多人应该比较了解这 ...
- 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)
@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=Syn ...
- IOS 非ARC开发内存管理的几条规则
关于ios内存管理.在开发过程中,内存管理很重要,我简单说明一下. 1.正确用法 UIView *v = [[UIView alloc] init]; //分配后引用计数为1 [self.view a ...
- IOS基础之 (十一) 内存管理 ARC
一 内存管理 1. set 方法内存管理的相关参数 retain: release旧值,retain新值(值适用于OC对象) assign:直接赋值(set方法默认,适用于非OC对象类型,即基本数据类 ...
- iOS中引用计数内存管理机制分析
在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...
- IOS基础 Day-1手动内存管理
辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1 手动内存管理 主要内容:release retain必须配对好,不然会占用内存 慢慢积累导 ...
- iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)
手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...
随机推荐
- Selenium常用API的使用java语言之4-环境安装之Selenium
1.通过jar包安装 点击Selenium下载 链接 你会看到Selenium Standalone Server的介绍: The Selenium Server is needed in order ...
- 树莓派远程桌面--使用windows自带的远程桌面软件mstsc.exe
步骤: 1.使用SSH登录树莓派 2.安装xrdp服务: sudo apt-get install xrdp 3.在Windows下打开命令框运行:mstsc 4.登录树莓派桌面 5.登录成功
- springcloud系列
1.使用Spring Cloud搭建服务注册中心2.使用Spring Cloud搭建高可用服务注册中心3.Spring Cloud中服务的发现与消费4.Eureka中的核心概念5.什么是客户端负载均衡 ...
- Jedis常用方法API
一.键操作 二.字符串操作 三.整数和浮点数操作 四.列表(List)操作 五.集合(Set)操作 六.哈希(Hash)操作 七.有序集合(Zsort)操作 八.排序操作
- 节点(node)操作
一.节点的属性 节点值页面中的所有内容,包括标签.属性.文本 nodeType,节点类型:如果是标签,则是1:如果是属性.则是2:如果是文本,则是3 nodeName,节点名字:如果是标签,则是大写的 ...
- bzoj 5206
$n$ 点 $m$ 边图的有限制三元环个数 首先将所有左右端点并且属性相同的边的权值相加,合并为一条边 在这只之前得先排序排序之前得先判断是否需要交换左右端点的位置 T_T 然后统计三元环 补充说明按 ...
- git submodule subtree常用指令
submodule 官方文档 添加 git submodule add -b master git@git.xxx:xxx/xxx.git src/xxx 删除 git submodule deini ...
- spring bean 的作用域之间有什么区别
spring bean 的作用域之间有什么区别? spring容器中的bean可以分为五个范围.所有范围的名称都是说明的, 1.singleton:这种bean范围是默认的,这种范围确保不管接受到多个 ...
- C++的面向对象的Dijkstra写法
C++的面向对象的Dijkstra写法 面向对象特点的充分使用 清晰的逻辑 简洁的图输入 程序 面向对象特点的充分使用 清晰明确的类实现 class Edge(边的实现) class Req (路由请 ...
- Kettle中ETL的效率优化
ETL效率优化 开启数据库日志记录及性能监控 如果我们想要优化一个ETL(KTR或者KJB)的性能,我们首先需要知道的就是它的瓶颈在哪里.而这些信息一般只能在ETL运行的步骤度量中看到,并且是不会持久 ...