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 ...
随机推荐
- 【SqlServer】empty table and delete table and create table
1.建表 1 IF object_id (N'表名', N'U') IS NULL CREATE TABLE 表名 ( 2 id INT IDENTITY (1, 1) PRIMARY KEY ,.. ...
- 阿里云windows 2012服务器部署java web程序教程
一:环境搭建 1.首先需要购买一个阿里云ECS服务器,购买时可以选择处理器核数以及内存大小(可以购买偏低配置,因为升级 方便) 2.购买后会自动创建一个实例,可以使用该实例中显示的公网地址在 ...
- debian8安装Odoo中的Barcode Scanner Hardware Driver模块时,提示没有evdev
解决方法: $ apt-get install python-dev python-pip gcc $ apt-get install linux-headers-$(uname -r) $ sudo ...
- eclipse maven maven-archetype-webapp 创建失败
如果在eclipse中发现创建maven失败,大部分的原因是因为本地仓库坏了,或是少东西了,最直接的方法就时删掉重新下载就好了
- C# Lamda中类似于SQL 中的 In 功能
首先,在程序中接受一个数组 例如:int[] s=[1,2,3]; 在Lamda表达式中使用如下: db.userinfo.where(u=>s.Contains(u.id)); 等同于sql语 ...
- Android OutOfMemoryError的理解
最近写了个测试demo调试网络优化,发现下载20M的文件时我直接申请了20M的空间,然后就OOM导致crash了~~ 典型的错误信息如下: OutOfMemoryError:Out of memory ...
- LeetCode 345. Reverse Vowels of a String
Write a function that takes a string as input and reverse only the vowels(元音字母) of a string. Example ...
- [转]DDD领域驱动设计基本理论知识总结
领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...
- WPF下的Richtextbox中实现表格合并,添加删除行列等功能
.Net中已有现在的方法实现这些功能,不过可能是由于未完善,未把方法公开出来.只能用反射的方法去调用它. 详细信息可以查看.Net Framework 的源代码 http://referencesou ...
- C语言的一些小知识
注:本文讨论的"C语言"为GNU C,而非ANSI C 标准库 语法 switch语句中的case关键词可以放在任何地方 switch (a) { case 1:; if (b== ...