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 ...
随机推荐
- python address already in use
1)找到使用端口的进程pid netstat -lp 2)kill掉pid kill -9 1234
- Mybatis批量操作
首先,mysql需要数据库连接配置&allowMultiQueries=true jdbc:mysql://127.0.0.1:3306/mybank?useUnicode=true& ...
- 实现放大转场动画 from cocoachina
原文1:http://www.cocoachina.com/ios/20160318/15714.html 原文2:http://ningandjiao.iteye.com/blog/2049105 ...
- 【Android】设置android:maxLines="1"后,android:imeOptions="actionSearch"失效
android:singleLine在API LEVEL 3已经废弃,可以用android:maxLines="1"代替. 但是测试的时候发现设置android:maxLines= ...
- centos 6.5 安装django
首先做这个:python安装setuptools http://blog.csdn.net/zhuying_linux/article/details/8167430 CentOS下将2.6升 ...
- HAProxy的安装与使用
在互联网时代中,后台系统架构,经常可以听到高可用集群.负载均衡集群之类的系统架构解决方案,其中,负载均衡有基于硬件的F5.Big-IP等,也有基于软件的LVS(基于Linux操作系统实现,性能可以和基 ...
- NetBeans无法使用编码GBK安全打开文件
刚才使用NetBeans打开php文件时,提示:NetBeans无法使用编码GBK安全地打开该路径下的文件. 找到了解决方案. 原文地址:http://qdjinxin.iteye.com/blog/ ...
- 剑指Offer-【面试题04:替换空格】
package com.cxz.question4; /* * 请实现一个函数,把字符串中的每个空格替换成"%20",例如"We are happy.",则输出 ...
- NOIP主要考查范围
基本数据结构 栈 队列 数组 优先队列 中级数据结构 堆(大根堆,小根堆) 并查集和带权并查集 哈希表 高级数据结构 (可选学) 树状数组 线段树 各种其他树 字符串和相关内容 1.KMP 2.各种操 ...
- Redis3重建Cluster
1.关闭cluster全部节点2.删除所有nodes.conf文件3.开启全部节点4.依次flushall5.重建集群即可 Share the post "Redis3重建Cluster&q ...