新增总结

1.问:系统根据不同场景下提供的内存管理方案有哪些?
1.答:散列表,是一个复杂的数据结构。(包括引用计数表和弱引用表)。
TaggedPointer,适用于NSNumber这些小对象
对于64位架构下的iOS程序,采用的的NONPOINTER_ISA(非指针型的isa内存管理方案)

问:什么是ARC?
答:ARC是LLVM(编译器)自动给我们添加return和release操作和Runtime协作来实现自动引用计数来管理内存的

问:为什么weak指针指向的对象被废弃后会被自动置为nil?
答:当对象被废弃之后,delloc方法的内部实现会调用清除弱引用的一个方法,然后在清除弱引用的方法当中,会通过hash算法查找被废弃对象在弱引用表中的位置,来提取它所对应的弱引用值的一个列表数组,然后进行for循环遍历,把每一个weak指针都置为nil

问:什么是自动释放池?(苹果是如何实现autoreleasepool的?)
答:自动释放池是以栈为节点通过双向链表的形式组合起来的。他和线程是一一对应的

问:什么是循环引用?你遇到过哪些循环引用?是如何解决的?

2 问:UI卡顿,掉帧的原因
2 答:下一帧vsync信号到来之前,CPU和GPU并没有完成下一帧图像的合成,就造成了卡顿或者掉帧

4 问:什么是KVO
4 答:kvo是 key-value-observing的缩写。kvo是oc语言对于观察者设计模式的又一实现。苹果使用了isa(isa swizzling)混写来实现kvo

当一个类的属性被观察的时候,系统会通过runtime动态的创建一个该类的派生类,并且会在这个类中重写基类被观察的属性的setter方法,而且系统将这个类的isa指针指向了派生类,从而实现了给监听的属性赋值时调用的是派生类的setter方法。重写的setter方法会在调用原setter方法前后,通知观察对象值得改变


新增总结_第1张图片
WechatIMG14.jpeg

重写setter方法添加的方法

-(void)willChangeValueForKey:(NSString *)key
-(void)didChangeValueForKey:(NSString *)key

使用setter方法改变值kvo会生效

通过kvc设置value,能否触发kvo生效?
答:可以。因为kvc可以触发对象的setter方法,而kvo重写了setter方法,所以可以触发。

通过成员变量直接赋值,能否触发kvo生效?
答:不可以。但是可以通过手动添加去让它生效。加入上面重写setter方法的那两个方法

[self willChangeValueForKey:"value"]
value+=1;
[self didChangeValueForKey:"value"]

5 问:什么是kvc?
kvc是键值编码。是一种可以直接通过字符串的名字(Key)来访问类属性的机制

问 :UIview和Calayer的联系
答:uiview为calayer提供内容,以及负责触摸等事件,并且参与响应链
calayer通过contents显示uiview的内容。这是系统设计上单一职责原则的一个体现。

问:谈谈对UI事件传递和视图响应机制的理解
答:事件传递主要有两个方法

//哪个视图响应这个事件,就把这个视图返回去
-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event
//判断当前点击的位置是否在当前视图范围内
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

响应者链应该是:First Responser—-> UIView -- > The Window -- >The Application -- > UIApplication Delegate
(如果传递到 UIApplication Delegate还是没有视图来响应这一事件,这时候并不会造成崩溃,系统会当什么都没有发生过)

UI事件传递链 UIApplication->UIWindow -> UIView -> Next UIView -> NextView (直到用户触碰的那个View)
(通过事件传递的那两个方法,倒序遍历)

问:图像的显示原理是什么?
答:CPU和GPU这两个硬件都是通过总线来连接起来的,在cpu中经常输出的是一个位图,经过总线在合适的时间上传到gpu。gpu在拿到这个位图之后,会对这个位图做一下图层的渲染包括纹理的合成,然后把这个结果放到帧缓冲区当中,然后有视频控制器在指定时间之前根据vsync信号在帧缓冲区中提取内容,然后显示到显示器中

3 问:UI tableview 滑动优化方案
3 答: 从CPU方面考虑:
@1对象的创建,调整和销毁,放入子线程中)
@2实现预排版(布局计算,文本计算)
@3预渲染(图片的编解码等,文本异步绘制)
从GPU方面考虑:
@1减少离屏幕渲染(可以依托于CPU的异步绘制机制)
@2视图混合(减少视图的复杂性)

问:UI tableview中多线程处理数据源,如何保证数据源同步。
这个应用场景:新闻列表中,有一条广告,点击x号删除掉之后
答:并发访问,数据拷贝。或者串行访问

问分类与扩展的概念?

你可能感兴趣的:(新增总结)