0 问题:

1解释self = [super init]方法

其实就是容错处理,当父类初始化失败,会返回一个nil,表示初始化失败。由于继承的关系,子类是需要拥有父类的实例和行为,必须先初始化父类,再初始化子类

2线上App崩溃

方法一,在源生代码中修改,提交

方法二,利用第三方平台,JSPatch  使用JS调用oc源生接口,替换任意OC方法,我的认识就是可以不通过重新上架app项目到appStore就可以修改oc代码

3App中混合H5开发,优缺点:

方法一:使用UIWebView或者WKWebView(ios8以后)

通过UIWebView代理方法拦截,判断scheme是否是约定好的,调用本地API是哪

shouldStartLoadWithRequest

方法二:ios7以后,直接通过JavaScriptCore库,通过往JS DOM注入对象(某个类的实例)

优缺点:加入h5,比原生要慢很多,体验不好;可以实现嵌入别的功能入口,可以随时更改,不用更新版本就可以上线

4static

函数体内,作用范围是该函数体,该变量的内存只被分配一次,下次调用时仍然维持上次的值;模块内是全局变量,可以被模块内的所有函数访问,外部不行

5地图和定位:

定位,创建位置管理器请求用户授权;请求目的地和当前位置的针线;创建渲染物对象在mapView代理方法中根据折现创建渲染物,并设置颜色

6常见的Http状态码:302请求重定向;304网页自请求者上次请求后没有更新,可以节省带宽

500以上是服务器错 ;400以上是请求链接错误或者找不到服务器;200以上是用户成功获取到了请求的文件,正确;100以上是请求接受成功‘

7isa指针指向什么

每一个对象内部都有isa指针,这个指针指向它真正的真是类型,根据这个指针就能知道将来调用哪个类的方法

8触摸事件的传递:

触摸事件的传递是从父控件传递到子控件,如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件,不能接收触摸事件的四种情况:不接收用户交互userInteractionEnabled = NO;隐藏hidden = YES;透明alpha <= 0.01;未启用enabled = NO;

9事件响应者链

如果当前view是控制器的view,那么就传递给控制器,如果控制其不在,则将其传递给它的父控件,在视图层次结构最顶层视图也不能处理接收到的事件或消息,将事件或消息传递给UIWindow对象进行处理;如果UIWindow对象也不能处理,将事件或消息传递给UIApplication对象,如果UIApplication也不能处理对象或消息,则将丢弃掉

10UITableView的复用机制

每次创建cell的时候,通过dequeueReusableCellWithIdentifier:方法创建cell,先到缓存池中找指定标识的cell,如果没有直接返回nil,如果没有找到标识的cell,会通过initWithStyle:reuseIdenitifier:创建一个cell,当cell离开界面的时候,会被放到缓存池中,供下次使用

11沙盒目录

Application:存放程序源文件,上架前经过数字签名,上架后不可以更改

Documents:常用目录,iClound备份目录,存数据

Library:

Caches:存放体积大又不需要备份的数据

Preference:设置目录,iCloud会备份设置信息

tmp:存放临时文件,不会被备份,这个文件下的数据有随时被清除的可能

12pushViewController和presentViewController有什么区别

两个都是在多个视图控制器里跳转的函数

presentViewController提供是一个模态视图控制器(modal)

pushViewController提供一个栈控制器数组,push/pop

13UIView和CALayer是什么关系

UIView显示在屏幕上归功于CALayer,通过调用drawRect方法渲染自身的内容,调节CALayer属性可以调整UIView的外观,UIView继承UIResponder,比起CALayer可以影响用户事件,ios6之后,可以方便的通过视图调试功能查看图层之间的关系

UIView是ios系统界面中元素的基础,所有的界面元素都继承它,内部是由Core Animation 来实现,它的真正的绘图部分,是由一个叫做CALayer(core Animation Layer)的类管理。UIView本身,访问有关绘图和坐标有关的属性,frame/bounds,实际上内部都是访问CALayer的相关属性

14

浅拷贝和深拷贝的区别:

浅Copy:可以理解为指针的复制,只是多了一个指向这块内存的指针,共用一块内存。

深Copy:理解为内存的复制,两块内存是完全不同的,也就是两个对象指针分别指向不同的内存,互不干涉。

15drawRect方法:

只有在此方法中,系统才能获取到上下文环境  ; rect参数是绘图上下文的大小;drawRect方法在view显示的时候调用一次

重绘:【self setNeedsDisplay];   系统会帮助调用drawRect方法,清除掉原来的,再绘制新的

[self setNeedsDisplayInRect:CGRect]; 固定区域的重绘

不能手动调用,否则获取不到

16app崩溃 收集问题

使用腾讯的bugly  输入程序id 关联进去,然后程序员查看崩溃日志

17动画:分为显示动画和隐式动画

在UIView上的事显示动画,不用我们手动去开启,只要直接调用animation的接口就可以了。

在CALayer上的动画叫隐式动画,需要我们去手动开启,隐式动画分为三种,属性动画,组动画和转场动画,属性动画又分为基础动画和帧动画,帧动画需要指定路径

隐式动画有隐式代理:动画的开始和动画的结束

18字符串使用copy

如果不使用copy,

@property(nonatomic,strong)NSString *str;

NSMutableString *string = [NSMutableString string];

[string appendString:@"hello"];

self.str = string;

NSLog(@"%@",self.str);

[string appendString:@"world"];

NSLog(@"%@",self.str);

}

NSString中copy的问题[3807:239891] hello

NSString中copy的问题[3807:239891] helloWorld

我们只给self.str附了一次值,但是self.str 的值改变了,这是因为把可变字符的地址指向了str,所以string的值改变了,self.str也跟着改变,

改为copy后,保证了在代码中数据的安全。  不可变不会有这种问题

19因为+load是在类被初始化时候就被调用的。+initialize是在收到消息之后才调用,如果应用不发送消息给它,它就永远不可能执行

20这个写法会出什么问题:@property (copy) NSMutableArray *array;

NSMutableArray用copy修饰有时就会crash,因为对这个数组进行了增删改操作,而copy后的数组变成了不可变的NSArray,没有响应的增删改方法,所以对其进行增删改操作就会报错

21 简述你对UIView、UIWindow和CALayer的理解

UIWindow对象是所有UIView的根,管理和协调的应用程序的显示。UIWindow类是UIView的子类,可以看作是特殊的UIView。一般应用程序只有一个UIWindow对象,即使多个UIWindow对象,也只有一个UIWindow可以接受到用户的触屏事件。

UIView是用来显示内容的,可以处理用户事件。

CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。

UIView和CALayer是相互依赖的关系。UIView依赖与calayer提供的内容,CALayer依赖uivew提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。UIView来自CALayer,高于CALayer,是CALayer高层实现与封装。UIView的所有特性来源于CALayer支持。

你可能感兴趣的:(0 问题:)