objective-c 面试题
2019独角兽企业重金招聘Python工程师标准>>>
1. objc的内存管理:
bjec内存管理采用引用计数的方式。当你使用new,alloc或copy创建对象时,对象的引用计数由0自增到1,调用release方法之后对象的引用计数减一,当且仅当对象的引用计数为0的时候dealloc方法将被自动调用,所以,我们应该尽量避免手动调用dealloc方法。因为可能代码的其他地方还存在对该对象的引用,调用dealloc方法将该对象释放之后可能会造成对该对象的非法引用而导致程序崩溃。
以下是有关objc对象的内存管理的一些API:
1,alloc, allocWithZone,new(带初始化)为对象分配内存,retainCount为“1”,并返回此类的一个实例对象。
2,release retainCount 减“1”,减到“0”时将自动调用此对象的dealloc方法。
3,retain retainCount 加“1”
4,copy,mutableCopy 复制一个实例,retainCount数为“1”,返回此实例。所得到的对象是与其它上下文无关的,独立的对象(干净对象)。
5,autorelease 在当前上下文的AutoreleasePool栈顶的autoreleasePool实例添加此对象,由于它的引入使Objective-C(非GC管理环境)由全手动内存管理上升到半自动化。
2. retain, copy, assign区别
(1)、assign是直接赋值。不会涉及引用计数问题,主要用于对objc基础数据类型(NSInteger、CGFloat等)和C基本数据类型(int 、double、float、char等)的赋值.
(2)、retain是指针拷贝,使用了引用计数,对对象进行retain操作之后将使对象的引用计数+1,增加了一个对原对象的引用。
(3)、copy是值拷贝,对对象进行copy操作之后相当于给原对象做了一份拷贝。新对象的值将和原对象相同,但是新对象和员对象各自有自己的内存地址,即,新对象的内存地址不同于原对象,所以,copy不会使员对象的引用计数递增。但是新对象的引用计数将递增为1,相当于创建了一个与原对象相同的新的对象。
(4)、atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
if (property != newValue) {
[property release];
property = [newValue retain];
}
nonatomic属性表示禁止多线程,当某个对象不需要在多个线程中访问时该属性可以有效地提高效率,节省资源。
注意:retain不能用于基本数据类型,因为基本数据类型没有引用计数。copy属性只对实行了NSCopying协议的对象类型有效。当数据为int, float等原生类型时,可以使用assign。
3、release与autorelease区别
这两个方法都会使对象的引用计数减一,不同之处在于,当release/autorelease操作使对象的引用计数为0的时候,如果执行的release,则将会立即调用dealloc释放掉该对象。相反如果用的使autorelease,该对象不会立即被释放,而是将该对象放到自动回收池中,当最近的一个pool被释放之后,该对象才会被执行dealloc释放。
总结:
1. 当你使用new,alloc或copy创建对象时,对象的count retain到1。你一定要负责把这个对象release 或 autolease掉。这样当它的生命周期结束时,它才能清空。
2. 当你使用 其他方法获得一个对象时,你可以认为它已经retain了一个count,并且autolease掉了。你不用考虑和它相关的清理问题 。但是如果你想保留这个对象,那么你需要retain它,并且要确保之后你release了这个对象。
3. 如果你retain一个对象,你最终总是需要release或者autolease它。
这三条规则在写代码 的时候一定要遵守,一旦遵守了一般也就不会有内存泄露的问题。
4. cocoa框架部分:
Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言。当然,在代码中也可以嵌入C和C++的语句。在Cocoa框架中,所有的控件、窗口等都继承自 UIView,对应MVC中的 V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewController实现。对于不同的UIView,都有相应的UIViewController 对应MVC中的C。比如在iPhone OS上常用的UITableView,它所对应的Controller就是UITableViewController。至于MVC中的M,那需要根据用户自己的需求来实现了。
转载于:https://my.oschina.net/u/874588/blog/107936
objective-c 面试题相关推荐
- Objective C内存管理之理解autorelease------面试题
Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Aut ...
- 超全!iOS 面试题汇总
超全!iOS 面试题汇总 2015-10-20 CocoaChina 作者:Job_Yang 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家. ...
- oracle dba笔试,一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 了 最后30分散分 快来啊...
当前位置:我的异常网» Oracle管理 » 一个好资企业的的oracle DBA面试试题 大家来看看啊 一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 ...
- 【渝粤教育】国家开放大学2019年春季 1362应用语言学 参考试题
试卷代号:1362 应用语言学 试题 2019年7月 注意事项 一.将你的学号.姓名及分校(工作站)名称填写在答题纸的规定栏 内.考试结束后,把试卷和答题纸放在桌上.试卷和答题纸均不得带 出考场. 二 ...
- 面试题字符集和编码区别_您和理想工作之间的一件事-编码面试!
面试题字符集和编码区别 A recruiter calls you for a position with your dream company. You get extremely excited ...
- c/c++笔试面试题(4)
c/c++笔试面试题(4) 2007-11-08 16:46 749人阅读 评论(0) 收藏 举报 Sony笔试题 1.完成下列程序 * *.*. *..*..*.. *...*...*.. ...
- 李洪强经典面试题37
1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEnco ...
- php 对象转数组_PHP的垃圾回收机制-PHP高级面试题+详解
八重樱:面试10家公司,收获9个offer,2020年PHP 面试问题zhuanlan.zhihu.com ps:本篇内容包括精选面试题与知识篇. PHP面试题关于PHP的垃圾回收机制,PHP的垃圾 ...
- html大一期末考试,2017年大学英语大一期末考试试题及答案
2017年大学英语大一期末考试试题及答案 C. The young man is in fervent love with a young, cheerful girl. D. It is the l ...
- 见过的最全的iOS面试题
之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Cat ...
最新文章
- 用aspnetpager实现datalist分页(绝对的简单实用)
- 学习笔记Flink(七)—— Flink Kafka插件
- python怎么连接MongoDB数据库
- 大数据量高并发访问的数据库优化方法
- Centos 安装 Oracle Java JDK
- Python 多线程基本步骤
- Android自动播放下一曲,环信Android自动播放下一条语音
- Python基于Snap7与PLC建立连接并读写数据
- Calendar类、自定义实现日历控件
- 算法基础 计算机数学课件,第4章计算机制图数学基础_中国地质大学:数字测图_ppt_大学课件预览_高等教育资讯网...
- 桃花岛--SpringBoot系列之Spring Data Jpa注解和基础操作
- 普通高考录取成绩查询2021,重磅!2021年全国高考录取分数线预测
- jntoo.php,admin/website.php · 曹琪/shufadasai-englishi - Gitee.com
- 为什么心中总是各种“草泥马”在奔
- conda虚拟环境中 安装 jupyter notebook
- 钰泰半导体ETA4034爆款OVP+OCP+NTC+OTP+FAULT五合一方案, 兼容BQ24314
- 2020最新的web前端体系和路线图,想学web前端又不知道从哪开始的快来瞧一瞧呀
- Java多线程(超详解)
- linux下格式化apfs,APFS文件系统科普贴
- 群晖5.2php核心设置_求救!群晖dsm系统如何才能找到并设置php.ini文件
热门文章
- 从VC 6.0移植代码到VS C++ 2005得出的一些经验
- JAVA SE学习day16:reflect
- 信息收集渠道:文本分享类网站Paste Site
- Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序
- mysql 避免使用临时表_从日期范围中选择时防止MySQL使用临时表
- 计算机电缆怎么做耐压试验,ZGF直流高压发生器进行电缆耐压试验的6个步骤
- https open api_钉钉API发送消息
- 一个网站让你系统的入门脑机接口和神经科学
- Tensorflow安装与测试
- 吴恩达:AI是时候从大数据转向「小数据」了