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 面试总结 一的更多相关文章

  1. ios面试技术要点

    iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...

  2. iOS 面试基础题目

    转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...

  3. iOS面试贴士

    iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...

  4. IOS面试攻略

    IOS面试攻略(1.0) 2013-10-13 20:58:09|  分类: IOS面试 |  标签:ios知识点总汇  ios面试  |举报|字号 订阅     来自:伊甸网 @ 看到这个关键字,我 ...

  5. C C++ OC iOS面试重点问题(一)

    C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量?  ...

  6. IOS面试问题总结

    IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报   目录(?)[+]   通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...

  7. 十个iOS面试问题

    十个iOS面试问题 十个iOS面试问题.不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会. ...

  8. [转] 上级向的十个iOS面试问题

    上级向的十个iOS面试问题 转自 http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术 ...

  9. iOS面试的算法相关

    转自:https://www.jianshu.com/p/c4820b159159 面试中遇到的这些算法,在平常工作中,基本不会用到. 不过现实的面试中经常喜欢问关于算法的问题 有些还要求写出代码.一 ...

  10. 一些iOS面试基础题总结

    一些iOS面试基础题总结 目录 多线程 AutoLayout objc_msgSend Runtime 消息转发 Category NSObject 与 objc_class Runloop Auto ...

随机推荐

  1. From 202.97.60.193 icmp_seq=48 Time to live exceeded

    从浙江某电信ip的服务器上 ping 大陆外某个外网地址不通,报如下信息: From 202.97.60.193 icmp_seq=48 Time to live exceeded google,百度 ...

  2. Redis-Cluster实战--5.使用redis-cli安装

    Redis-Cluster实战--.使用redis-cli安装 博客分类: redis 缓存 redis-cluster redisCluster指派槽cluster-infomeetslots 转载 ...

  3. ffmpeg-20160929-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...

  4. [java]OutOfMemoryError 原因及解决办法

    导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环 ...

  5. ssl访问的原理

    本文无图文对照解释,但力求通俗易懂.请读者边读边手绘各个流程,一便于理解.      总体交互流程如下      1. 客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个https ...

  6. Java注解基础概念总结

    注解的概念 注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations.注解与类.接口.枚举在同一个层次 ...

  7. 值得推荐的C/C++框架和库

    值得推荐的C/C++框架和库 [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看 ...

  8. ESXI6.0启用 snmp

    1.首先通过ILO登录远程控制桌面然后按F2输入密码后进入 2.开启shell 3.按住 Alt + F1 切换到shell 4.启用 snmp   esxcli system snmp set -- ...

  9. 用C#实现 查看exe所加载dll列表的功能

    var p = System.Diagnostics. Process.GetProcessesByName("w3wp").First(); List<System.Dia ...

  10. zsh 自动补全导致命令显示重复

    关键字:autocomplete, zsh, backspace, securecrt, xterm, linux console 举个例子: 输入命令ls  然后按TAB补全试试,发现竟然是这样的 ...