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