iOS 面试总结 一
iOS 开发工程师之面试总结一
好久没有出去面试了,大概一年的时间都很稳定,最近出去面试感觉心里特别慌,没有了当时的勇气了,其实还是感觉自己的准备不是特别的充分,这是主要原因。###
这段时间待得太安逸没了紧张感,最近一段时间感觉自己要和突飞猛进的新技术脱节了,好多之前学过的东西也生疏了,决定好好总结一下自己和写下最近面试的经验。###
1.Object-C 是如何实现内存管理的? 常用的内存管理语句有哪些?
Object-C 中的内存管理也就是引用计数机制。
手动引用计数(MRC),当创建一个对象的时候系统会为这个对象的引用计数置为1,retain方法会使对象的引用计数加1,release方法会使对象的的引用计数减1,当引用计数为0时, 调用dealloc方法去销毁对象。
自动引用计数(ARC),自动引用计数的实质还是通过引用计数机制去管理的,只不够不用我们程序员去手动管理,系统会在程序编译时自动在合适的地方添加retain、release、autorelease 方法去控制引用计数的平衡。
内存管理的常用语句有 alloc 、retain 、release 、dealloc 、autorelease 。
顺便提一下 内存管理严格遵循四条规则?
1、由自己生成的对象,自己持有
2、非自己生成的对象,自己也能持有
3、不再需要自己持有的对象时释放
4、非自己持有的对象无法释放
2.浅拷贝和深拷贝的区别? 写一段深拷贝的代码。
浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间.
深拷贝就是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
void testMutable()
{
//可变对象的复制,copy和mutableCopy都是深拷贝
NSMutableString *str1 = [NSMutableString stringWithString:@"test"];
NSMutableString *str2 = [str1 copy];
//copy返回的是不可变对象,因此str2不能改变,会发生崩溃
//[str2 appendString:@"test"];
NSMutableString *str3 = [str1 mutableCopy];
[str3 appendString:@"test"];
NSLog(@"%@ %@ %@",str1,str2,str3);
NSLog(@"%p %p %p",str1,str2,str3);
}
3.下面一点错误百出的程序,指出它有什么问题。
typedef void(^MyBlock)(NSString *str);
@interface ViewController
@property(weak) MyBlock block;
@property(nonatomic,strong) NSString *currentText;
@end
---------------------------
@implementation ViewController
-(void)method{
NSString *text =@"123";
self.block = ^(NSString *str){
self.currentText = str;
text = str;
};
}
@end
---------更正的代码如下--------
typedef void(^MyBlock)(NSString *str);
@interface ViewController:NSObject
@property(copy) MyBlock block;
@property(nonatomic,copy) NSString *currentText;
@end
---------------------------
@implementation ViewController
-(void)method{
__block NSString *text =@"123";
__weak typeof(self) weakSelf = self;
self.block = ^(NSString *str){
weakSelf.currentText = str;
text = str;
};
}
@end
4.从名为 'employee' 的 sqlite 表中查找 'name' 属性以 'Jo' 开头的从符合结构的第100条开始10条记录,按 'updatedAt' 倒序。
这个先不写了,我要好好看一下在贴出来。
哈哈哈
5.iOS 中常用的设计模式有哪些? Notification 和 Delegate 使用区别。
MVC 、MVVM 、代理 、block 、KVC 、KVO 。
Notification 和 Delegate 都可以用来传递消息。
Delegate 是一对一的,二者要建立相互关联。
Notification 是一对一 或 一对多的,二者不需要做相互关联。
Delegate 的效率要比 Notification 高。
6.tableView 的DateSource 协议有哪些方法必须要实现,怎么进行性能优化?
(1)numberOfSectionsInTableView: //可写可不写(当一个分区的时可不写)
(2)tableView:numberOfRowsInSecion:
(3)tableView:cellForRowAtIndexPath:
优化问题:
(1):网络请求成功后进入后台进行布局计算并返回高度缓冲备用。
(2):当cell的subview较多时尤其是图片的时候建议用其drawRect:中自行绘制。
(3):透明的问题,将UI元素的透明度设置成不透明的。
7.iOS 中的多线程实现有哪些,对你了解最深入的说说你的理解。
1、NSThread
2、NSOperation
3、Grand Central Dispatch (GCD)
1、使用线程可以把程序中占据时间长的任务放到后台去处理,如图片、视频的下载。
2、发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好。
3、能适当提高执行效率,提高资源利用率。
4、创建线程是有开销的,大量开启的话,会降低性能;程序设计也会更复杂,比如线程之间的通信,多线程的数据共享。
5.GCD会自动管理线程的生命周期(创建线程,调度任务,销毁线程),不需要我们编写任何管理线程的代码。
6.http://blog.sina.com.cn/s/blog_99c943d00102wphm.html
iOS 面试总结 一的更多相关文章
- ios面试技术要点
iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...
- iOS 面试基础题目
转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...
- iOS面试贴士
iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...
- IOS面试攻略
IOS面试攻略(1.0) 2013-10-13 20:58:09| 分类: IOS面试 | 标签:ios知识点总汇 ios面试 |举报|字号 订阅 来自:伊甸网 @ 看到这个关键字,我 ...
- C C++ OC iOS面试重点问题(一)
C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量? ...
- IOS面试问题总结
IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报 目录(?)[+] 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...
- 十个iOS面试问题
十个iOS面试问题 十个iOS面试问题.不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会. ...
- [转] 上级向的十个iOS面试问题
上级向的十个iOS面试问题 转自 http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术 ...
- iOS面试的算法相关
转自:https://www.jianshu.com/p/c4820b159159 面试中遇到的这些算法,在平常工作中,基本不会用到. 不过现实的面试中经常喜欢问关于算法的问题 有些还要求写出代码.一 ...
- 一些iOS面试基础题总结
一些iOS面试基础题总结 目录 多线程 AutoLayout objc_msgSend Runtime 消息转发 Category NSObject 与 objc_class Runloop Auto ...
随机推荐
- DevExpress 标题栏添加搜索功能
上图是效果图 附件示例代码下载
- SemanticZoom配合GridView组件的使用关键点
1,SemanticZoom 有两个重要属性 默认值ZoomedInView(不设置的话,默认显示,包括分类名和分类成员)和ZoomedOutView(这个是缩小后的目录,只要包括分类名,点击跳到对应 ...
- Ubuntu16.04 VTK7.1.0+QT4.8.6+QtCreator开发环境配置
VTK需要OpenGL3.0或更高版本的驱动,但虚拟机下的Ubuntu不支持OpenGL3.0,或者自己按网上教程配置之后也能支持,但过程相当繁琐,本人试验失败. 最终决心采用双系统,装好之后,执行g ...
- css3 动画的有关属性
transform transform: none|transform-functions; transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜. ...
- JS脚本语言是什么意思?
javascript,Javascript是一种浏览器端的脚本语言,用来在网页客户端处理与用户的交互,以及实现页面特效.比如提交表单前先验证数据合法性,减少服务器错误和压力.根据客户操作,给出一些提升 ...
- https单向认证和双向认证
单向认证: .clinet<--server .clinet-->server .client从server处拿到server的证书,通过公司的CA去验证该证书,以确认server是真实的 ...
- Web Js 按键事件……Enter提交事件 Enter Js事件
$(document).ready(function(){ document.onkeydown = function (event){ if (event.keyCode==13) //回车键的键值 ...
- Visual Studio (VS IDE) 你必须知道的功能和技巧 - 【.Net必知系列】
前言 本文主要阐述一些Visual Studio开发下需要知道的少部分且比较实用的功能,也是很多人忽略的部分.一些不常用而且冷门的功能不在本文范围,当然本文的尾巴[.Net必知系列]纯属意淫,如有雷同 ...
- HDU 5754 Life Winner Bo 组合博弈
Life Winner Bo Problem Description Bo is a "Life Winner".He likes playing chessboard gam ...
- jQuery简单入门
jQuery是什么 John Resig在2006年1月发布的一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作为什么要使用jQuery (1)write less do ...