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 ...
随机推荐
- ping 或者ssh 发生connect: No buffer space available 错误
如果遇到这种情况,一般说明你的本地服务器的arp表缓存太大,而服务器内核设定的回收条数太小,一直被回收造成的. 可以用一下命令扩大arp表可以缓存的记录条数: echo 512 > /proc/ ...
- ASCII码、Unicode码 转中文
ASCII码.Unicode码 转中文 在最近工作中遇到了一些汉字编码转换的处理,可以通过正则表达式及转换字符来实现转成中文 Unicode转换示例 通常为10位编码, 通过digit参数传入 pri ...
- PHP 链接多种数据库 的方法
数据库中 单词之间的空格(一个语句前面和后面做字符串拼接的时候最好留空格 ) 可以随便加 其他地方 禁止随便加空格!!(加了 就报错)! =====================总结=== ...
- shell 多行注释
:<<! 要注释的内容 要注释的内容 要注释的内容 !
- fabric
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # fab test [root@192.168.85.99:22] Executing ...
- ASP.NET MVC 设置Area中 Controller 的方法 默认启动页
MVC中通常分区域编程,互不干扰,如果需要设置某个区域下面的某个控制器下面的某个方法为默认启动页的话,直接修改项目的路由如下: public static void RegisterRoutes(Ro ...
- LeetCode 206 Reverse a singly linked list.
Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...
- 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】
经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...
- 卸载oracle 11g grid软件
一,使用deinstall 同样,卸载grid软件在11g中也推出了了卸载工具deinstall卸载同卸载oracle数据库软件 具体可参考:Behaviour of the Oracle De-in ...
- C# 取整函数
向上取整math.ceiling(1) = 1math.ceiling(1.1) = 2math.ceiling(1.5) = 2向下取整math.float(1) = 1math.float(1.1 ...