码迷,mamicode.com
首页 > 移动开发 > 详细

一些iOS面试题及简要回答

时间:2014-06-01 16:37:35      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:ios   面试题   

1. #import #include@class有什么区别?import<> 跟 #import”"又什么区别?

1> #import#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次

2> @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题

3> #import <> 用来包含系统自带的文件,#import “”用来包含自定义的文件


2. 属性readwritereadonlyassignretaincopynonatomic 各是什么作用,在那种情况下用?

1> readwrite:同时生成get方法和set方法的声明和实现

2> readonly:只生成get方法的声明和实现

3> assignset方法的实现是直接赋值,用于基本数据类型

4> retainset方法的实现是release旧值,retain新值,用于OC对象类型

5> copyset方法的实现是release旧值,copy新值,用于NSStringblock等类型

6> nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)

3. 对于语句NSString*obj = [[NSData alloc] init]; ,编译时和运行时obj分别是什么类型?

1> 编译时是NSString类型

2> 运行时是NSData类型


4. 常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?

1> 常用OC类型:NSStringNSArrayNSDictionaryNSDataNSNumber

2> OC对象需要手动管理内存,C的基本数据类型不需要管理内存


5. id 声明的变量有什么特性?

id声明的变量能指向任何OC对象


6. Objective-C如何对内存管理的,说说你的看法和解决方法?

1> 每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁

2> 通过retain可以让对象的计数器+1release可以让对象的计数器-1

3> 还可以通过autorelease pool管理内存

如果用ARC,编译器会自动生成管理内存的代码


7. 内存管理的几条原则时什么?按照默认法则.方法生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

1> 只要调用了alloccopynew方法产生了一个新对象,都必须在最后调用一次release或者autorelease

2> 只要调用了retain,都必须在最后调用一次release或者autorelease

3> @property如果用了copy或者retian,就需要对不再使用的属性做一次release操作

4> 如果用了ARC,另外讨论


8. 线程和进程的区别?

1> 一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间

2> 要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务

3> 一个进程中允许开启多条线程,也就是同时执行多个任务


9. 堆和栈的区别?

1> 堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存

2> 栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存


10. 为什么很多内置的类,如TableViewdelegate的属性是assign不是retain

1> tableView的代理一般都是它所属的控制器,控制器会对它内部的view做一次retain操作

2> 假设tableView也对代理(控制器)做一次retain操作,那么就出现循环retain问题


11. 定义属性时,什么情况使用copyassignretain

1> copyNSStringBlock等类型

2> assign:基本数据类型

3> retainOC对象类型


12. ViewController loadViewviewDidLoadviewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?

1> loadView

 当第一次使用控制器的view时,会调用loadView方法创建view

 一般在这里自定义view


2> viewDidLoad

 当控制器的view创建完毕时会调用,也就是在loadView后调用

 一般在这里添加子控件、初始化数据


3> viewDidUnload

 当控制器的view因为内存警告被销毁时调用

 一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)


本文出自 “前程似锦” 博客,请务必保留此出处http://brilliantfuture.blog.51cto.com/8958010/1420170

一些iOS面试题及简要回答,布布扣,bubuko.com

一些iOS面试题及简要回答

标签:ios   面试题   

原文地址:http://brilliantfuture.blog.51cto.com/8958010/1420170

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!