ios_最新面试题

1. ios 深拷贝和浅拷贝的区别

可以简单整理为:不可变对象的copy,都是浅拷贝,地址相同,

可变对象的copy和mutablecopy,都是深拷贝,

copy方法返回的是不可变对象,mutableCopy返回的是可变对象,容器对象内的对象始终是浅拷贝。

2.Objective-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

答:Objective-C的类不可以多重继承;可以实现多个接口(协议);Category是类别;一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

3.Objective-C 中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

答:线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;

在主线程执行代码,方法是performSelectorOnMainThread

如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:

4.Category(类别)、 Extension(扩展)和继承的区别

区别:

1. 分类有名字,类扩展没有分类名字,是一种特殊的分类。

2. 分类只能扩展方法(属性仅仅是声明,并没真正实现),类扩展可以扩展属性、成员变量和方法。

3. 继承可以增加,修改或者删除方法,并且可以增加属性。

5.什么是 KVO 和 KVC?

1). KVC(Key-Value-Coding):键值编码 是一种通过字符串间接访问对象的方式(即给属性赋值) 举例说明:

 stu.name =@"张三"// 点语法给属性赋值[stu setValue:@"张三"forKey:@"name"];

 通过字符串使用KVC方式给属性赋值stu1.nameLabel.text =@"张三"; [stu1 setValue:@"张三"forKey:@"nameLabel.text"];

 KVO(key-Value-Observing):键值观察机制 他提供了观察某一属性变化的方法,极大的简化了代码。 KVO只能被KVC触发,包括使用setValue:forKey:方法和点语法。// 通过下方方法为属性添加KVO观察

- (void)addObserver:(NSObject*)observer forKeyPath:(NSString*)keyPath options:(NSKeyValueObservingOptions)options context:(nullablevoid*)context;// 当被观察的属性发送变化时,会自动触发下方方法 

 - (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context{} KVC 和 KVO 的 keyPath 可以是属性、实例变量、成员变量。

5、ViewController生命周期                                                                                                                按照执行顺序排列:                                                                                                   1.initWithCoder:通过nib文件初始化时触发。                                                           2.awakeFromNib:nib文件被加载的时候,会发生一个awakeFromNib的消息到nib文件中的每个对象。                                                                                                                              3.loadView:开始加载视图控制器自带的view。                                                      4.viewDidLoad:视图控制器的view被加载完成。                                                   5.viewWillAppear:视图控制器的view将要显示在window上。                 6.updateViewConstraints:视图控制器的view开始更新AutoLayout约束。7.viewWillLayoutSubviews:视图控制器的view将要更新内容视图的位置。8.viewDidLayoutSubviews:视图控制器的view已经更新视图的位置。              9.viewDidAppear:视图控制器的view已经展示到window上。                    10.viewWillDisappear:视图控制器的view将要从window上消失。               11.viewDidDisappear:视图控制器的view已经从window上消失。

6.如何对iOS设备进行性能测试?                                                                                                   答: Profile-> Instruments ->Time Profiler

7.开发项目时你是怎么检查内存泄露?                                                                                                1). 静态分析 analyze。                                                                                                                         2). instruments工具里面有个leak可以动态分析。

8 . 请写出以下类的直接父类:UIView,CALayer,UIViewController,UIWindow,UIButton,UILabel。

UIView ----父类UIResponder -----NSObject

CALayer ----父类NSObject          UIViewController 父类-----UIResponder

UIWindow ----父类UIView     UIButton----父类 UIControl --------UIView

UILabel --------父类UIView

你可能感兴趣的:(ios_最新面试题)