iOS面试题-iOS部分_ 下载本文

内容发布更新时间 : 2024/5/2 8:38:27星期一 下面是文章的全部内容请认真阅读。

iOS部分理论:

1.描述什么是MVC 【MVC简介】

是一种架构模式,它是苹果非常热衷的一种架构模式

M: model 模型 保存所有应用程序里要使用的数据,比如一款太空大战游戏,模型要负责保存飞船的大小、飞行速度、位置信息、装载了多少只枪等等这些信息。并且要处理数据之间的逻辑 比如飞船要打中敌机多少次能把敌机击落 模型只是负责记录数据,跟数据的显示是没关系的,数据的显示是控制器跟视图的任务

C: controller 控制器 负责控制视图如何去显示模型里要显示的数据 它要负责把模型里的数据传输给视图(控制器是通过视图控制器的【生命周期】来控制视图变化的)

V:view 视图 视图就是视图控制器的小跟班,它的任务就是负责显示视图,完全听命于视图控制器,视图控制器让视图做什么视图就做什么

2.列举常用网络协议的端口号,例如HTTP默认的是80

FTP 文本传输协议 20或21 TELNET 远程登录协议 23 POP3 发邮件协议 110

3、frame与bounds的区别?Bounds的大小改变frame改变吗

答:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统) 会发生改变

4、UIViewController的生命周期方法调用顺序 答:- (void)viewDidLoad;

- (void)viewDidUnload;

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated; 5、UITableView的执行流程是怎么样的

答:\返回TableView的section数目 \是否有表头标题栏 \设置section1中行数

\设置section1中row1行的高度……row2行的高度……逐行设置,直至当前section1属性设置完毕

\是否有表头栏,之后同4-5,设置section2的属性.同理,设置完毕所有的section的相关属性

\接下来设置的是每个section中每row添加的数据

这样整个TableView就设置完毕了.

6、如何设计一个可变高度(根据内容自适应高度)的UITableViewCell 答:1) 创建并添加一个UILabel作为单元格cell的子视图; 2) 在UITableView的委托方法:

(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath: (NSIndexPath *) indexPath中计算高度 3) 在UITableView的委托方法:

(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath: (NSIndexPath *) indexPath中计算UILabel的框大小。 7、UIView的圆角属性设置方法 答:利用setCornerRadius:

8. UIVIiewController在现实过程中,各个方法的调用顺序 init->viewDidLoad->viewDidAppear->viewDidUnload

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

答:编译时为NSString类型,运行时为NSData类型。

10.object-c中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码,方法又是什么? 答:a、线程创建有三种方法:使用NSThread创建

(detachNewThreadSelector:toTarget:withObject:)、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue; b、在主线程执行代码,方法是performSelectorOnMainThread,

c、如果想延时执行代码可以用performSelector:withObject:afterDelay:

11.描述一下iOS SDKSDK中如何实现MVC的开发模式?

答:iOS开发中使用了很好的分层设计,数据都可以放在自定义类型、NSArray及其子类型、NSDictionary及其子类型中,视图的显示都用UIView及其子类来实现,控制器在UIViewController的子类中实现,在控制器的ViewDidLoad、ViewWillAppear、ViewDidAppear、ViewDidDisappear、ViewWillDisappear等方法中实现数据和视图的交互。

12、MVC设计模式是如何体现在iOS Appkai'fa开发中的?三者之间有哪些常见消息传递方式?

答:iOS开发中使用了很好的分层设计,数据都可以放在自定义类型、NSArray及其子类型、NSDictionary及其子类型中,视图的显示都用UIView及其子类来实现,控制器在UIViewController的子类中实现,在控制器的ViewDidLoad、ViewWillAppear、ViewDidAppear、ViewDidDisappear、ViewWillDisappear等方法中实现数据和视图的交互。三者之间常见消息传递方式有:代理、通知中心、kvc/kvo等。

13. 关于自定义Cell中,图片下载用到的方法?

如果有添加了第三方库SDWebImage/AFNetWorking,可以使用UIImageView的类别方法setImageWithURL:直接异步加载,如果没有的话可以使用

NSURLConnection发起request请求,或者使用ASI将下载请求添加到下载队列中,将图片下载之后,在回调方法里,回调主线程,设置图片。

14. UITableViewCell怎样使用更流畅?

首先cell的复用机制节约了系统资源;其次应当注意有些复杂的大数据或网络数据应采用异步加载的方式进行加载,以免cell刷出时发生卡顿。

15. 在UIWebView上点击回复,如何使用UITextField进行回复?

UIWebView有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。通过JAVAScript获取点击时间,弹出UITextField,输入字符串后,可以通过post请求发送回复。

16. 关于图文混排是如何排版的?

图文混排应当以图片为起点,首先明确图片的位置,文字可以选择位于图片的下方,或者是环绕效果。环绕效果可以采用2个以上label或textView来实现;也可以通过AttributeString的属性设置,或者CoreText重绘UIVIew,添加文字的方式,修改文字间的间隔,达到让出图片的效果。如果图文显示在高度可变的视图中,如tableView的Cell中,可以计算文字占位Rect,动态修改视图或cell的高度。

17. @property (nonatomic, retain) IBOutlet UIView * view这个对象需要release吗,如果需要,如何做?

其实XIB文件所生成的视图对象是无法真正释放的,因此关联XIB的属性也可以设置为assign属性,而视图不会释放。从这个角度上讲,这个对象不释放也可以,但是既然用retain做修饰符,出于尊重内存管理法则,理应进行释放,最简单的方式就是将视图在dealloc方法中设为nil,适用于非ARC,但ARC中这样写也没关系。

18. 两种传输协议在什么时候使用?

所谓的两种传输协议,是指网络协议中的传输层协议,即TCP协议和UDP协议。TCP协议会在收发数据的两端建立稳定可靠,有序的链接,传输数据稳定可靠,但系统资源消耗较大,适合,数据或文件的下载或上传,Http网络协议就是采用TCP传输协议传输数据的。UDP是通俗讲得漂流瓶协议,发出协议的主机就