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).并发访问,数据拷贝(会有内存开销问题)
(2).串行访问(会有延时问题)
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%。