1. Masonry
1. mas_make/mas_update/mas_remake的区别
行为 | make | update | remake |
---|---|---|---|
已有某类型约束,再添加 | 不更新 | 更新 | 更新 |
没有某类型约束,再添加 | 更新 | 更新 | 更新 |
是否删除已有约束 | 不删除 | 不删除 | 删除 |
2. Xcode 使用技巧
1. 统计整个工程代码行数
find . “(” -name “.m” -or -name “.mm” -or -name “*.cpp” -or -name
“.h” -or -name “.rss” “)” -print | xargs wc -l
其中,-name “*.m” 就表示扩展名为.m的文件。同时要统计Java文件和xml文件的命令分别是:
find . “(” -name “*.java” “)” -print | xargs wc -l
find . “(” -name “*.xml” “)” -print | xargs wc -l
3. OC
1. Object-c的类可以多重继承吗?可以实现多个接口吗?Category是什么?重写一个类的方式用继承好还是分类好?为什么?
-Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。
2. #import 跟#include 有什么区别,@class呢, #import<> 跟 #import””有什么区别?
- #import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。
3. Object C中创建线程的方法是什么?
-使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;
4. MVC设计模式是什么? 还有哪些常用的设计模式?
-设计模式:并不是一种新技术,而是一种编码经验,使用比如java中的接口,iphone中的协议,继承关系等基本手段,用比较成熟的逻辑去处理某一种类型的事情,总结为所谓设计模式。面向对象编程中,java已经归纳了23种设计模式。
mvc设计模式 :模型,视图,控制器,可以将整个应用程序在思想上分成三大块,对应是的数据的存储或处理,前台的显示,业务逻辑的控制。 Iphone本身的设计思想就是遵循mvc设计模式。其不属于23种设计模式范畴。
代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用.比如一个工厂生产了产品,并不想直接卖给用户,而是搞了很多代理商,用户可以直接找代理商买东西,代理商从工厂进货.常见的如QQ的自动回复就属于代理拦截,代理模式在iphone中得到广泛应用.
单例模式:说白了就是一个类不通过alloc方式创建对象,而是用一个静态方法返回这个类的对象。系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为,比如想获得[UIApplication sharedApplication];任何地方调用都可以得到 UIApplication的对象,这个对象是全局唯一的。
观察者模式: 当一个物体发生变化时,会通知所有观察这个物体的观察者让其做出反应。实现起来无非就是把所有观察者的对象给这个物体,当这个物体的发生改变,就会调用遍历所有观察者的对象调用观察者的方法从而达到通知观察者的目的。
5. 64位操作系统,64位编译器 sizeof(int) sizeof(char) sizeof(int ) sizeof(char ) 分别是多少
章鱼答: 4 1 4 1
6. 64位操作系统,一个结构 struct aStruct{int a; char b; int c; char d}; 此时 sizeof(struct aStruct) 是多少? 如果是 struct aStruct{int a; char b; char d; int c};此时 sizeof(struct aStruct) 是多少?为啥?
章鱼答: A:4 1对齐为4 4 1对齐为4
B:4 1对齐为4 1前面的这个4还可以放三个,所以这个就放在前面的4里了 4
7. 全局并发队列和自定义并发队列的区别,如果现在有两种任务需要并发处理,其中一种是:任务单位小,数量多 另一种是:任务单位大,数量少 分别应该使用哪种队列处理?为什么?
章鱼答: 96楼那个说的很明白了,不是这么分的, 全局省去了多次创建销毁的操作。 自定义便于自己管理。 和任务大小没关系,一般都是自定义的线程处理专门的任务,全局的做一些简单的常规操作。
8. 为了防止循环引用,我们都知道使用weak(self); 但是程序中偶尔会见到strong(self); 这种用法,请问:strong(self)的应用场景是什么?
章鱼答: 关于weak的strong的所有问题,眼光还是要放在销毁,讲道理的说提前释放的情况并不多见,常见的还是应为强引用,最后引用计数没变成0,最后对象没销毁。详情看我这篇博文,http://www.jianshu.com/p/5d1b7568418b。
9. 为了防止循环引用,我们都知道使用weak(self),是不是所有的block 如果内部需要使用对象本身,都需要使用weakself?举例说明
章鱼答: 看这篇博文 http://www.jianshu.com/p/5d1b7568418b。
10. 现有一个对象a,对象a 强持有了自定义对象b、c、d, 是不是可以说,当a的dealloc 只要执行了 我就可以认为内存没有泄漏了?如果不是的话,请举出例子让a对象完全释放。
章鱼答: 当一个对象的引用第一次成为1的时候,这个对象就初始化成功了,等到它再一次变成0的时候,会给runloop发送一条消息,然后runloop在合适的时候会执行dealloc方法,所以dealloc方法调用了,那么这个对象必然被销毁了。但是a b c d是四个不同的对象,全部销毁,必然是abcd都执行了dealloc方法,这里能保证a没有内存泄露。
11. 类方法和对象方法的区别何在?类方法的生存周期? 相对与对象方法,哪类处理适合使用类方法?
章鱼答:这是NSObject的头文件,自己观察一下,总结出自己的看法,才有用。
12. kvo监听是否一定是在主线程完成的?如果不是,请举例说明
章鱼答:不是,KVO的本质就是监听对象的属性进行赋值的时候有没有调用setter方法. 如果有调用setter方法, 就会接收到属性变更的通知, 反之则没有. 所以,眼光放在setter的现成。
13. 某同事开启了一个NSTimer,但是无论如何这个timer都跑不起来,作为他的老大,代码看起来没什么问题,以你10年ios的开发经验,第一反应是问题出在哪?
章鱼答: 没有10年经验,先看初始化,如果是scheduledTimerWithTimeInterval看runloop type,如果不是scheduled看加没加进runloop。
14. 多线程编程种,死锁产生的条件是什么?死锁是不是只在主线程发生?
章鱼答: 不是,先看死锁定义,死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
通常死锁的题,只要两个现成线程互为条件就可以触发死锁了。 蛋说我要一只鸡来生下我。 鸡说我要一个蛋才能创建。
在
15. 举出一个例子,说明dispatch_sync 的应用场景
章鱼答: 答第10题的时候我们可以用到dispatch_sync,在主线程写下这个代码就产生死锁了。
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@“你看不到我打印。”);
});
16. 如何创建一个常驻线程?
章鱼答: 建议使用runloop,详情可以看下我的这个博文:http://www.jianshu.com/p/b9a4f55001fe
17. 我们知道,多线程读写,只要有1个写,就有可能出现并发问题,解决方案可以用锁,但我们又知道锁的效率不高,并且破坏程序结构,加锁的代码通常并不易理清逻辑,那么,还有什么样的手段能实现这个目的?(考虑队列) 如何实现?
章鱼答: 你也说了读不会有问题,写才会有问题,所以区分读写咯。 读 并行 写 串行。 大家可以搜一下,基于现成安全的多读单写。
18. 基于13题的前提,假如现在有一个模型,写操作较少,但是读操作非常多,如何优化13题的模型,使之达到:写操作串行,读操作并行的效果?(考虑队列和dispatch_barrier函数族)
章鱼答:这道题和上面的题其实就是在考api咯,答案括号都给出来了。
19. dispatch_group函数族的应用场景是什么?假如现在让你使用信号量(dispatch_semaphore)来模拟类似的功能,如何实现?
章鱼答:这道题还是考api, 场景批量上传图片, dispatch_group,NSOperationQueue,还是NSOperationQueue好用一些。gcd主要是方便。