面试题_ios学习

1、====@property 有哪些常用属性关键词,并写出他们的区别

strong 释放旧对象将旧对象的值赋予输入对象,再提高输入对象的索引计数为1,此关键字经常使用。
weak 不增加引用计数,不持有对象,因此也不能决定对象释放 对比assign 的一个好处是,当对象消失时指针自动归为nil
assign 适用于基础数据类型(NSInteger CGFloat...)不增加引用计数
copy 建立一个索引计数为1 的对象然后释放旧对象 此属性只对那些实行了NSCopying协议的对象类型有效(NSString , Block)
atomic 和 nonatomic用来决定编译器生成的getter和setter是否为原子操作,atomic 设置成员变量的@property属性时 默认为是atomic 提供线程安全
nonatomic 非原子性访问对于属性赋值的时候不加锁,多线程并发访问会提高性能,如果不加此属性则默认是两个访问方法都为原子型事务访问。
readonly 此标记说明属性是只读的
readwrite 此标记说明属性会被当成读写的 这也是默认的属性
unsafe_unretained 跟weak类似,声明一个弱引用,但是当引用计数为0时,变量不会自动设置为nil(ios5加入的 我基本没用过)

copy : strong
1.copy建立一个同样的对象 比如一个NSString 地址为0x1212 内容 @“121” copy到另一个NSString上 地址改变 而内容不变 新对象retain +1 就对象不变 也就是说copy时内容拷贝 而 strong不是他只是单纯的生命一个变量 retain为1
2.strong的set方法时浅拷贝 copy的set为深拷贝
浅拷贝仅仅是把对象的引用复制,或者说对象的指针
不是所有对象都能使用copy ,使用了copy必须遵守协议(实现 copyWithZone: 方法)对于很多现有的类,如Nsstring, NSDictionary 已经实现了CopyWithZone:。如果我们需要一个新的类,就需要手动来重写CopyWithZone的方法。

assign : weak
在MRC环境下使用使用assign实现基本类型. 在ARC环境下,weak相当于assign 个人感觉weak比assign要强大的地方在 weak可以避免循环引用 , 同时当对象不存在时候可以将其置为nil

摘自https://www.jianshu.com/p/7fc3e94c78c2

再穿插下深拷贝浅拷贝

浅拷贝:
浅拷贝仅仅是把对象的引用复制,或者说对象的指针
不是所有对象都能使用copy ,使用了copy必须遵守协议(实现 copyWithZone: 方法)对于很多现有的类,如Nsstring, NSDictionary 已经实现了CopyWithZone:。如果我们需要一个新的类,就需要手动来重写CopyWithZone的方法
1、当我们copy的是一个不可变的对象时,他的作用相当于retain
引用计数+1哦,看仔细,相当于retain
内存地址是一样的,retainCount为2
2、当我们copy 的是一个可变对象时,副本对象是不可变的,同样实现了真正意义上的拷贝(copy一个Mutable类型可以深复制,但是其返回的 还是一个不可变的类型.)。
内存地址完全不同,retainCount为1
3、copy方法,得到的是不可变对象,不管以前的是可变还是不可变。

让我们看看深拷贝
深拷贝
”内容拷贝,源对象和副本指向的是不同的两个对象”,mutableCopy需要继承NSMutableCopying 协议才可以使用mutableCopy(实现 mutableCopyWithZone: 方法)
1、源对象引用计数器不变,副本计数器设置为1
2、当我们使用mutabelCopy 时 ,无论源对象是否可变,复制对象是否可变,都能实现了真正意义上得拷贝
3、mutableCopy方法,得到的是可变对象,不管以前的是可变还是不可变。

2、====runtime如何实现weak变量的自动置nil?
runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候会 dealloc, 在这个 weak 表中搜索,找到所有以a为键的 weak 对象,从而设置为 nil。
weak 修饰的指针默认值是 nil (在Objective-C中向nil发送消息是安全的)
3、====简述SDWebImage的工作流程
网络图片下载框架开发思路(参考SDWebImage,YYWebImage或者其他框架),有自己的开源框架着提供地址
1.提供了一个UIImageView的category用来加载网络图片并且对网络图片的缓存进行管理
2.采用异步方式来下载网络图片
3.采用异步方式,使用memory+disk来缓存网络图片,自动管理缓存。
4.支持GIF动画
5.支持WebP格式
6.同一个URL的网络图片不会被重复下载
7.失效的URL不会被无限重试
8.耗时操作都在子线程,确保不会阻塞主线程
9.使用GCD和ARC
10.支持Arm64

4、====iOS中UIWebView进行js交互,有哪些方法?APP如何定义方法让js进行调用?
// 当点击页面进行加载数据的时候调用

  • (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
    // 当页面开始加载的时候调用
  • (void)webViewDidStartLoad:(UIWebView *)webView;
    // 当页面加载完成的时候调用
  • (void)webViewDidFinishLoad:(UIWebView *)webView;
    // 页面加载失败的时候调用
  • (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

https://www.cnblogs.com/jjucap/p/7478047.html https://www.2cto.com/kf/201708/664284.html

5、====简述事件传递响应链顺序
在我们点击屏幕的时候,iphone OS获取到了用户进行了“单击”这一行为,操作系统把包含这些点击事件的信息包装成UITouch和UIEvent形式的实例,然后找到当前运行的程序,逐级寻找能够响应这个事件的对象,直到没有响应者响应。这一寻找的过程,被称作事件的响应链!
image.png

参考http://www.cocoachina.com/ios/20160113/14896.html
这篇文章写得的确很不错

https://www.cnblogs.com/huangzs/p/7516715.html

6、====使用系统的某些Block API(如UIView的Block版本写动画时)是否也考虑循环引用的问题
https://www.cnblogs.com/huangzs/p/7516715.html

7、====以+scheduledTimerWithTimeInterval...的方式触发的timer,滑动页面时,timer会暂定回调为什么?如何解决?
https://www.cnblogs.com/6duxz/p/4633741.html
8、====

面试题_ios学习_第1张图片
79511533793890_.pic.jpg

dispatch_sync(dispatch_get_main_queue(), ^(){
NSLog(@"222");
});
在ios中是无法使用 dispatch_sync(dispatch_get_main_queue()
原因如下:
在ios使用 dispatch_sync(dispatch_get_main_queue()^(){block体});
dispath向主队列加一个同步的block;

此时主队列在等待 dispatch_sync(dispatch_get_main_queue(),^(){block体}) 执行
,dispatch_sync在等待主队列执行完毕。
造成死锁。

所以在ios使用主队列 dispatch_get_main_queue() 时 应该使用异步执行
dispatch_async(dispatch_get_main_queue(), ^(){
NSLog(@"222");
});

9、====dispatch_barrier_async的作用是什么
dispatch_barrier_sync和dispatch_barrier_async的不共同点:
在将任务插入到queue的时候,dispatch_barrier_sync需要等待自己的任务(0)结束之后才会继续程序,然后插入被写在它后面的任务(4、5、6),然后执行后面的任务
而dispatch_barrier_async将自己的任务(0)插入到queue之后,不会等待自己的任务结束,它会继续把后面的任务(4、5、6)插入到queue

所以,dispatch_barrier_async的不等待(异步)特性体现在将任务插入队列的过程,它的等待特性体现在任务真正执行的过程。
https://blog.csdn.net/u013046795/article/details/47057585

10、====消息转发分几步完成?都是用哪些方法?
https://www.jianshu.com/p/1588d0aedca3

以上均出自网络,皆为学习如有侵权请留言

你可能感兴趣的:(面试题_ios学习)