iOS基础

iOS概念的理解

2017-11-02  本文已影响11人  a浮生若梦a
* 注:以下内容有网上搜索摘取,仅供大家参考学习,如有问题欢迎指正。

1.weak 关键字

weak 表示对对象的弱引用。weak此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值(此特质同assign类似),当它们指向的对象释放以后,weak会被自动设置为nil。
常用在delegate等属性的设置(防止循环引用),自定义IBOutlet控件中一般也使用(属性自身已经对它进行一次强引用,没有必要再强引用一次)

runtime 如何实现 weak 变量的自动置nil?

runtime 对注册的类会进行布局,对于weak 对象会放入一个 hash表中。 用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候就会 dealloc。假如 weak 指向的对象内存地址是a,那么就会以a为键,在这个weak 表中搜索,找到所有以a为键的weak对象,从而设置为 nil。

2.copy 关键字

copy 此特质所表达的所属关系与 strong 类似,然而设置方法并不保留新值,而是将其“拷贝” (copy)。当属性类型为 NSString 时,经常用此特质来保护其封装性,因为传递给设置方法的新值有可能指向一个 NSMutableString 类的实例。(用 @property 声明 NSString等经常使用 copy 关键字,是因为他们有对应的可变类型:NSMutableString,他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。)

3.深拷贝和浅拷贝

4.Runtime消息机制 前面文章有写过

Objective-C在运行时会转化为C代码执行,即运行时会被动态转为消息发送(objc_msgSend(receiver, selector))。可以通过Runtime的一系列方法获取类的一些信息(包括属性列表,方法列表,成员变量列表,和遵循的协议列表)。
(objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。)

5.RunLoop(简单描述,后面有时间再详写)

一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,这种模型通常被称作 Event Loop
Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消息循环,再比如 OSX/iOS 里的 RunLoop。实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。
RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行上面 Event Loop 的逻辑。线程执行了这个函数后,就会一直处于这个函数内部 “接受消息->等待->处理” 的循环中,直到这个循环结束(比如传入 quit 的消息),函数返回。

OSX/iOS 系统中,提供了两个这样的对象:NSRunLoop 和 CFRunLoopRef。
CFRunLoopRef 是在 CoreFoundation 框架内的,它提供了纯 C 函数的 API,所有这些 API 都是线程安全的。
NSRunLoop 是基于 CFRunLoopRef 的封装,提供了面向对象的 API,但是这些 API 不是线程安全的。

6.MVC模式

MVC、MVVM是一种架构模式,M表示数据模型Model、V表示View视图、C表示控制器Controller。
1、Model负责存储、定义、操作数据。2.View用来展示数据给用户,和用户进行操作交互。3.Controller是Model与View的协调者,

7.数据持久化(数据存储)

8.多线程

当需要进行一些耗时间的操作时,会把耗时间的操作放到分线程中。多线程编程是防止主线程阻塞,增加运行效率的最佳方法。iOS下的主线程堆栈大小是1M,第二个线程就是512KB。

9.HTTP链接和socket链接前面文章有写过

10.类别的作用

类别就是给系统原有的类添加方法,不能扩展属性。如果类别方法名和系统方法名一样,类别中的方法优先级更高

11.SDWebImage原理

1.首先从内存中查找图片(当图片在之前使用中被加载过),找到直接使用。
2.从沙盒中查找图片(当图片在之前使用中被加载过),找到直接使用,缓存到内存中。
3.从网络上获取图片。然后缓存到内存和沙盒。

12.UITableView单元格重用理解

UITableView通过重用单元格来达到节省内存的目的,通过对每个单元格指定一个重用标识符来指定单元格的种类。
当屏幕上的cell滑出屏幕时,系统会把这个单元格添加到重用队列中,等待被重用,当有新的单元格从屏幕外面滑入屏幕内时,系统会从重用列表查看有没有可以重用的单元格,如果有就拿过来用,如果没有就创建一个来使用。

13.KVC和KVO的理解

14.delegate和NSNotification

15.网络推送

16.NS/CF/CG/CA/UI前缀含义

17.生命周期

偷个懒看这篇吧

18.知识面了解

附:相关面试学习资料

上一篇 下一篇

猜你喜欢

热点阅读