1.线程是什么?进程是什么?二者有什么区别和联系?  
一个程序至少有一个进程,一个进程至少有一个线程: 
进程:一个程序的一次运行,在执行过程中拥有独立的内存单元,而多个线程共享一块内存 
线程:线程是指进程内的一个执行单元。 
联系:线程是进程的基本组成单位 
区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
 (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

2.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?  
管理机制:使用了一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他们自己的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息 时,持有计数数值会增加1。相反,当你像一个对象发送release消息时,持有计数数值会减小1。当对象的持有计数变为0的时候,对象会释放自己所占用的内存。 
retain(引用计数加1)->release(引用计数减1) 
alloc(申请内存空间)->dealloc(释放内存空间) 
readwrite: 表示既有getter,也有setter (默认) 
readonly: 表示只有getter,没有setter 
nonatomic:不考虑线程安全 
atomic:线程操作安全 (默认) 
线程安全情况下的setter和getter: 
- (NSString*) value { 
@synchronized(self) { 
return [[_value retain] autorelease]; 
}}  
(void) setValue:(NSString*)aValue { 
@synchronized(self) { 
[aValue retain]; 
[_value release]; 
_value = aValue; 
} } 
retain: release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 
assign: 简单赋值,不更改索引计数 (默认) 
copy: 其实是建立了一个相同的对象,地址不同(retain:指针拷贝 copy:内容拷贝) 
strong:(ARC下的)和(MRC)retain一样 (默认) 
weak:(ARC下的)和(MRC)assign一样, weak当指向的内存释放掉后自动nil化,防止野指针 
unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。

3.类变量的@protected ,@private,@public,@package,声明各有什么含义? 
@private:作用范围只能在自身类 
@protected:作用范围在自身类和继承自己的子类 (默认) 
@public:作用范围最大,可以在任何地方被访问。 
@package:这个类型最常用于框架类的实例变量,同一包内能用,跨包就不能访问

4.谈谈你对多线程开发的理解?ios中有几种实现多线程的方法? 
好处: 
1.使用线程可以把占据时间长的程序中的任务放到后台去处理 
2.用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 
3.程序的运行速度可能加快 
4·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。 
缺点: 
1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。 
2.更多的线程需要更多的内存空间。 
3.线程的中止需要考虑其对程序运行的影响。 
4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。 
实现多线程的方法: 
NSObject类方法 
NSThread 
NSOperation 
GCD

5.线程同步和异步的区别?IOS中如何实现多线程的同步? 
异步:举个简单的例子 就是游戏,游戏会有图像和背景音乐 
同步:是指一个线程要等待上一个线程执行完之后才开始执行当前的线程,上厕所 
NSOperationQueue:maxcurrentcount 
NSConditionLock 
GCD->http://blog.csdn.net/onlyou930/article/details/8225906

6.获取一台设备唯一标识的方法有哪些? 
http://www.cnblogs.com/max5945/archive/2013/06/24/3152292.html

(1)UDID 
(2)UUID 
(3)MAC Address 
(4)OPEN UDID 
(5)广告标识符 
(6)Vindor标示符 
*ios7以后使用keychain

7.iOS类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。 
不可以多继承 用protocol实现

8.堆和栈的区别? 
堆需要用户手动释放内存,而栈则是编译器自动释放内存 
问题扩展:要知道OC中NSString的内存存储方式

9.这段代码有什么问题吗:

@implementation Person 
- (void)setAge:(int)newAge { 
self.age = newAge; 

@end

正确写法 

if(_age){ 
[_age release]; 

_age = [newAge retain];


死循环(扩展:知道如何正确写setter和getter方法)

10.iOS本地数据存储都有哪几种方式? 
NSKeyedArchiver 
NSUserDefaults 
Write写入方式 
SQLite3 
http://blog.csdn.net/tianyitianyi1/article/details/7713103

(问题扩展:什么情况下使用什么样的数据存储) 
1.NSKeyedArchiver:采用归档的形式来保存数据,数据对象需要遵守NSCoding协议,对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。缺点:只能一次性归档保存以及一次性解压。所以只能针对小量数据,对数据操作比较笨拙,如果想改动数据的某一小部分,需要解压或归档整个数据。 
2.NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。缺点:如果要存储其他类型,需要转换为前面的类型,才能用NSUserDefaults存储。 
3.Write写入方式:永久保存在磁盘中。第一步:获得文件即将保存的路径:第二步:生成在该路径下的文件:第三步:往文件中写入数据:最后:从文件中读出数据: 
4. SQLite:采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。

11.简述你对UIView、UIWindow和CALayer的理解

http://blog.csdn.net/kuqideyupian/article/details/7731942 
http://o0o0o0o.iteye.com/blog/1728599

12.写一个完整的代理,包括声明,实现

注意手写的准确性

13.分析json、xml的区别?json、xml解析方式的底层是如何处理的?

http://www.open-open.com/bbs/view/1324367918671 
http://hi.baidu.com/fevelen/item/a25253ab76f766756cd455b6

14.ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?

http://blog.sina.com.cn/s/blog_68661bd80101nn6p.html

15.面向对象的三大特征,并作简单的介绍

封装、继承、多态 
多态:父类指针指向子类对象。两种表现形式:重写(父子类之间)和重载(本类中) 
OC的多态体现是:重写,没有重载这种表现形式

举例说明:

@interface Parent : NSObject //父类 
- (void)simpleCall; 
@end  
@interface Child_A : Parent //子类 Child_A 
@end  
@implementation Child_A 
- (void)simpleCall 

NSLog(@”我是Child_A的simpleCall方法”); 

@end 
@interface Child_B : Parent //子类Child_B 
@end 
- (void)simpleCall 

NSLog(@”我是Child_的simpleCall方法”); 

@end

然后,我们就可以看到多态所展示的特性了: 
Parent * pa=[[Child_A alloc] init];// 父类指针指向子类Child_A对象 
Parent * pb=[[Child_B alloc] init]; //父类指针指向子类Child_B对象 
[pa simpleCall];// 显然是调用Child_A的方法 
[pb simpleCall];// 显然是调用Child_B的方法

在OC中常看见的多态体现: 
- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

static NSString *CellWithIdentifier = @”Cell”; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellWithIdentifier]; 
return cell; 
}

(UITableViewCell *)指向cell子类对象

16.如监测系统键盘的弹出

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector( ) name:UIKeyboardWillShowNotification object:nil]; 
扩展:ios 弹出键盘挡住UITextView的解决方式

17.举出5个以上你所熟悉的ios sdk库有哪些和第三方库有哪些?

AFWorking/WebKit/SQLite/Core Data/Address Book

18.如何将产品进行多语言发布?

http://fengmm521.blog.163.com/blog/static/25091358201291645852889/

19.如何将敏感字变成**

search = @”某某某”; 
replace = @“*”; 
range = [mstr rangeOfString:search]; 
[mstr replaceCharactersInRange:range withString:replace]; 
NSLog(@”%@”,mstr);

20.objc中的减号与加号代表什么?

类方法 
21.单例目的是什么,并写出一个?

避免重复创建 节省内存空间 
static Model * model; 
+(id)singleton{ 
if(!model){ 
@synchronized(self){ 
model = [[Model alloc]init]; 
}} 
return model; 
}

简单的总结一下iOS面试中会遇到的问题的更多相关文章

  1. iOS面试中常见的算法题目

    一.前言 这里是在iOS求职中自己遇到的算法题,希望对大家有所帮助.不定期更新.如果大家想在线运行代码调试,可以将代码拷贝到这里.然后进行调试.下面就是常见的算法题目. 二.正文 1.就n的阶乘.(这 ...

  2. iOS面试的算法相关

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

  3. 阿里 IOS 面试官教你在面试中脱颖而出

    前言: 知己知彼.百战不殆,面试也是如此. 只有充分了解面试官的思路,才能更好地在面试中充分展现自己. 今天,阿里高级技术专家将分享自己作为面试官的心得与体会.如果你是面试者,可以借此为镜,对照发现自 ...

  4. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  5. ios开发中超简单抽屉效果(MMDrawerController)的实现

    ios开发中,展示类应用通常要用到抽屉效果,由于项目需要,本人找到一个demo,缩减掉一些不常用的功能,整理出一个较短的实例. 首先需要给工程添加第三方类库 MMDrawerController: 这 ...

  6. iOS面试高薪,进阶 你会这些呢嘛?(持续更新中)

    这个栏目将持续更新--请iOS的小伙伴关注!做这个的初心是希望能巩固自己的基础知识,当然也希望能帮助更多的开发者! 基础>分析>总结 面试 iOS常见基础面试题(附参考答案) iOS底层原 ...

  7. 谈谈如何在面试中发掘程序猿的核心竞争力zz

    早两天看了知乎日报的这篇文章<什么是程序员的核心竞争力?>,caoz讲的几点是让我感同身受.这让我联想起了给程序猿的面试,其实也就是通过短暂的接触来发掘程序猿的核心竞争力.接下来我就谈谈我 ...

  8. iOS 面试基础题目

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

  9. iOS面试知识集锦

    最近在面试iOS应聘者过程中,发现很多面试者基础都比较薄弱,但是项目经验都写的很多,问几个问题基本上就可以了解大概的情况了,今天看到cocoachina上这篇面试题不错,分享给大家~~~ OC的理解与 ...

随机推荐

  1. SQL Server-聚焦NOLOCK、UPDLOCK、HOLDLOCK、READPAST你弄懂多少?(三十四)

    前言 时间流逝比较快,博主也在快马加鞭学习SQL Server,下班回来再晚也不忘记更新下博客,时间挤挤总会有的,现在的努力求的是未来所谓的安稳,每学一门为的是深度而不是广度,求的是知识自成体系而不是 ...

  2. 2.css字体单位

    这期简单说说css字体单位 字体单位有三种:px.em.rem 任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px. % 百分比 in 英寸 cm 厘米 mm 毫米 e ...

  3. 1088: [SCOI2005]扫雷Mine

    1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 979[Submit][Sta ...

  4. 《C++之那些年踩过的坑(二)》

    C++之那些年踩过的坑(二) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 今天讲一个小点,虽然小,但如果没有 ...

  5. MySQL查询语句的45道练习

              一.设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四) ...

  6. lnmp pathinfo问题

    location / {              if (!-e $request_filename) {              rewrite  ^/(.*)$  /index.php/$1  ...

  7. APIJSON-以坚持和偏执,回敬傲慢和偏见

    APIJSON简介: APIJSON是一种JSON传输结构协议. 客户端可以定义任何JSON结构去向服务端发起请求,服务端就会返回对应结构的JSON字符串,所求即所得. 一次请求任意结构任意数据,方便 ...

  8. FastCGI超过活动超时时间

    线上环境:PHP5.4 and IIS 打开IIS管理器,找到FastCGI,打开后编辑选项 活动超时默认为70(秒) 请求超时默认为90(秒) 可根据项目需求来更改这两项的值

  9. spdlog源码阅读 (1): sinks

    0. spdlog简单介绍 spdlog 是一个快速的 C++ 日志库,只包含头文件,兼容 C++11.项目地址 特性: 非常快 只包含头文件 无需依赖第三方库 支持跨平台 - Linux / Win ...

  10. iOS开发之UIApplication和delegate

    1.概述 所有的移动操作系统都有个致命的缺点:app很容易受到打扰.比如一个来电或者锁屏会导致app进入后台甚至被终止. 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统 ...