iOS经典面试题大全2021(二)(附答案)

本文是iOS面试题大全,涵盖了ARC原理、库的区别、Runloop、内存管理、网络请求、Block、多线程、数据解析等多个核心知识点,帮助iOS开发者准备面试。

(iOS面试资料大全)

36、 简述ARC的实现原理。它在什么时机插入retain/release?

ARC:自动引用计数。它会在对象创建或者消亡的时候自动插入retain/release。达到自动管理内存的目的。

37、 Framework与Library的区别?动态库与静态库的区别?

library与Framework的区别:

在iOS中,Library 仅能包含编译后的代码,即 .a 文件。
但一般来说,一个完整的模块不仅有代码,还可能包含.h 头文修的、.nib 视图文件、图片资源文件、说明文档。(像 UMeng 提供的那些库,集成时,要把一堆的文件拖到Xcode中,配置起来真不是省心的事。
Framework 作为 Cocoa/Cocoa Touch 中使用的一种资源打包方式,可以上述文件等集中打包在一起,方便开发者使用(就像Bundle)。

静态库与动态库的区别:

简单的说,静态链接库是指模块被编译合并到应用中,应用程序本身比较大,但不再需要依赖第三方库。运行多个含有该库的应用时,就会有多个该库的Copy在内存中,冗余。
动态库可以分开发布,在运行时查找并载入到内存,如果有通用的库,可以共用,节省空间和内存。同时库也可以直接单独升级,或作为插件发布。

38、 什么是runloop?

一般来说,一个线程一次只能执行一个任务,执行完成后线程就会退出,如果我们需要一个机制,让线程能随时处理事件但并不退出。代码逻辑如下:

function loop() {
		initialize();
		do {
	var message = get_next_message();
	process_message(message);
} while(message != quit)
}

这种模型我们通常称之为EventLoop(事件循环)。RunLoop实际上是一个对象,这个对象管理了其需要处理的事件和消息。并提供了一个入口函数来执行上面EventLoop逻辑。在OSX/iOS系统中,提供了两个这样的对象:NSRunLoop和CFRunLoopRef。

CFRunLoopRef是在CoreFoundation框架内,它提供了纯C函数的API,所有这些API都是线程安全的。

NSRunLoop是基于CFRunLoopRef的封装,提供了面向对象的API,这些API不是线程安全的。

苹果不允许直接创建RunLoop,只提供了两个自动获取的函数:CFRunLoopGetMain()和CFRunLoopGetCurrent()。

线程和RunLoop之间是一一对应的。

39、#include与#import的区别?#import与@class的区别?

“#include"与”#import"功能一样,都是导出头文件。只是#import不会引起交叉编译,可以确保头文件只导入一次。#import会包含这个类的所有信息。包括实例变量和方法,而@class只是告诉编译器,它后面声明的名称是类的名称,至于类的定义,后面会告诉你。使用#import编译效率高,可以防止相互包含的编译错误。

40、Static与const的区别?

const表示只读的意思,只在声明中使用。

static一般有2个作用,规定作用域和存储方法。对于局部变量,static规定其为静态存储区,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放。

对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见,对于static函数也是在当前模块内函数可见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值