iOS常见面试题归纳(一)基础篇

图片来自网络

1、OC的理解与特性:

OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定、动态加载等)。

封装性:指隐藏对象的属性和实现的细节,仅对外提供公共的访问方法。封装的目的在于将对象的使用者和设计者分开,以提高软件的可维护性和可修改性。

继承性:在基本层次关系的不同类中共享数据和操作。

多态性:是指同一操作作用于不同对象上可以有不同的解释,并产生不同的执行结果。动态绑定,是指在程序运行时才将消息所请求的操作与实现该操作的方法进行连接。

2、面向过程和面向对象的区别:

面向过程强调的是“该怎么做”,代码封装成函数,然后依次去做一件事情。

面向对象强调的是“该由谁去做”,把要做的事情抽象成一个类,实例化对象去做。

3、请简述你对协议的理解:

协议,即双方都需要遵守的规则.在OC中,当一个类中有协议,另一个类想要调用协议中的内容,就需要根据前者协议的规则重写方法。

作用是:
a.延时调用
b.值的回调

4、如何理解retain/copy/assign/release/autorelease/dealloc关键字

MRC情况下:

retain:对象引用计数+1
copy:拷贝对象和对象的属性;
assign:用于基本数据类型
release:对象引用计数-1
autorelease:遇到autorelease pool释放,对象引用计数-1

ARC情况下:

retain:strong代替
copy:不变
assign:基本数据类型
release:不能用
autorelease:不能用
dealloc:不能调用

5、如何实现ARC和MRC的混合编程

ARC 环境 MRC 文件 -fno-objc-arc

MRC环境 ARC文件 -fobjc-arc

6、请简述类别和继承有什么联系和区别?

类别和继承都可以增加方法

类别:是在原来的类的基础上增加方法。

继承:通过继承关系添加方法。

前者还是原来的类,后者已经是新的类。

7、请简述页面传值都有哪些实现方式

①直接传值
②代理传值
③block传值
④单例传值
⑤通知传值

8、系统中有哪些对象是单例

①NSUserDefaults
②UIApplication
③NSNotificationCenter
④NSFileManager
⑤NSFileHandler
⑥NSBundle
⑦NSURLCache
⑧NSHTTPCookieStorage
……………

9、如何使用UIScrollView实现无限加载多张图片

①创建一个数组数据源.
②声明一个索引记录当前第几个.
③每次滑动重新装载图片,改变索引.
④创建少量UIImageView

10、请简述视图控制器的生命周期

①initCoder
②awakeFromNib
③viewLoad
④viewDidLoad
⑤viewWillAppear
⑥viewWillLayoutSubviews
⑦viewDidLayoutSubviews
⑧viewDidappear
⑨viewWillDisapper
⑩viewDidDisapper
⑪dealloc

11、UITableView有哪些优化方式

①复用cell
②异步加载图片
③使用不透明视图

12、frame 和 bounds 有什么不同?

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

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

13、用@property声明的 NSString / NSArray / NSDictionary 经常使用 copy 关键字,为什么?如果改用strong关键字,可能造成什么问题?

用 @property 声明 NSString、NSArray、NSDictionary 经常使用 copy 关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作(就是把可变的赋值给不可变的),为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。

①因为父类指针可以指向子类对象,使用 copy 的目的是为了让本对象的属性不受外界影响,使用 copy 无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本。
②如果我们使用是 strong ,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性。

总结:使用copy的目的是,防止把可变类型的对象赋值给不可变类型的对象时,可变类型对象的值发送变化会无意间篡改不可变类型对象原来的值。

14、iOS中都有哪些技术可以实现开辟线程,它们的联系和区别是什么?

(1).NSThread、NSOperation、GCD
(2).都是开辟分线程
(3).NSThread 比其他两个轻量级,使用简单,需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销
(4).NSOperation 不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上,引导线程
(5).GCD 是替代NSThread, NSOperation的高效和强大的技术。

15、数据存储的方式都有哪些?

(1).NSUserDefaults
(2).Plist:不能存储基本数据类型只能存储OC对象
(3).SQLite3:一款开源的轻型的嵌入式关系型数据库,可移植性好、易使用、内存开销小,SQLite3 是无类型的,可以保存任何类型的数据到任意的字段中。
(4).Core Data :是对SQLite3的封装,更加面向对象,效率没有SQLite3高
(5).文件
(6).归档:只有遵守了NSCoding协议的对象

16、RunTime的原理和应用?

(1).MJExtension 字典转模型实现:利用运行时,遍历模型中所有属性,根据模型的属性名,去字典中查找key,取出对应的值,给模型的属性赋值.
(2).给分类动态添加属性

17、原生与H5的交互

通过WebViewJavascriptBridge框架

18、UI数据源同步问题

如何解决在子线程网络请求过程中,用户执行在主线程删除操作,引发的请求网络后刷新UI而删除的数据还存在的问题?
(1).并发访问,数据拷贝(会有内存开销问题)


屏幕快照 2018-04-24 下午9.14.27.png

(2).串行访问(会有延时问题)


屏幕快照 2018-04-24 下午9.16.51.png

19、在项目中用分类做了哪些事?

(1).声明私有方法
(2).分解体积庞大的类文件
(3).把Framework的私有方法分开

20、类别和扩展的区别?

(1).类别是运行时决议,扩展是编译时决议
(2).类别可以有声明有实现,扩展只以声明的形式存在,多数情况下寄生于宿主类的.m中
(3).可以为系统类添加类别,但不能为系统类添加扩展。

21、assign和week的区别?

assign特点:(1)修饰基本数据类型,如int,bool等;(2)修饰对象类型时,不改变其引用计数;(3)会产生悬垂指针(assign对象被释放的时候,指针仍热指向原来的地址,可能导致内存泄漏或程序异常)。
week特点:(1)不改变被修饰对象的引用计数;(2)所指对象在被释放之后会自动置为nil。
区别:(1)assign既可以修饰对象,也可以修饰基本数据类型;week只能修饰对象。
(2)assign指针在对象被释放之后,仍然指向原来的地址;week指针在对象被释放之后,置为nil。

21、什么是RunLoop?

RunLoop:通过内部维护的事件循环来对事件/消息进行管理的一个对象。
事件循环:没有消息需要处理时,休眠以避免资源占用(用户态->内核态);有消息需要处理时,立刻被唤醒(内核态->用户态)。

引伸题:

一、区块链:
1、区块链技术是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术,并不是一种单一的、全新的技术,而是多种现有技术整合的结果,包含“区块 + 链”的数据结构、分布式存储、加密算法、共识机制四大核心技术。
2、数据层、网络层、共识层是构建区块链技术的必要元素,缺少任何一层都不能称之为真正意义上的区块链技术。
3、非对称加密是一种保证区块链安全的基础技术。该技术含有两个密钥:公钥和私钥,首 先,系统按照某种密钥生成算法,将输入经过计算得出私钥,然后,采用另一个算法根 据私钥生成公钥,公钥的生成过程不可逆。由于在现有的计算能力条件下难以通过公钥 来穷举出私钥(即计算上不可行),因此可以认为是数据是安全的,从而能够保证区块链的数据安全。
4、区块奖励是矿工通过算力解决相关数学难题并创建新区块后所获得的奖励,区块奖励根 据不同加密货币而有所不同。以比特币为例,比特币以一个确定的但不断衰减的速率被挖出来,大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币;每开采 210000 个区块其奖励减半,其周期为四年。从比特币发明最初的 50 个比特币/区块到 2016 年后的 12.5 个比特币/区块,并会在 2140 年达到总数接近 2100 万个比特币,在那之后新的区块不再包含比特币奖励,矿工的收益全部来自交易费。
5、Bitcoin (比特币)的概念是由中本聪(化名)于 2009 年 1 月 3 日提出,是一种点对点 的、去中心化、全球通用、无排他性、不需第三方机构或个人,基于区块链作为支付技 术的加密货币,比特币不依赖中央机构发行,而是通过工作量证明共识机制在区块链中 完成,也就是俗称“挖矿”。比特币使用整个 P2P 网络节点的分布式数据库来确认、验 证及记录货币的交易; 比特币发行总量 2100 万枚,预计于 2140 年(编者注:2040 年的 说法有误)发行完毕,目前市面上流通量超过 80%。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容

  • 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...
    JonesCxy阅读 989评论 1 7
  • • 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向...
    WSGNSLog阅读 1,227评论 0 1
  • 1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...
    iYeso阅读 1,884评论 0 13
  • ——青灯素笺 多线程的底层实现 1.首先搞清楚是什么线程、什么是多线程2.Mach是第一个以多线程方式处理任务的系...
    寒山半秋阅读 1,268评论 0 19
  • 生活总是充满了困惑,同样,每个人的一生都不会没有一点波澜,都不会总是一帆风顺,面对长大的我们,面临着生活的选择,生...
    钟离凌羽阅读 349评论 0 0