iOS 面试经验
1,视图控制器的生命周期
答:loadView:加载View;viewDidLoad :view加载完毕;viewWillAppear:view即将显示;viewDidAppear:view已经显示;viewWillDisapper:view即将消失;viewDidDisappear:view已经消失;delloc:viewController被销毁。
// ARC下不需要写[super dealloc];
2,UITableView优化方案
答:http://www.cocoachina.com/ios/20150602/11968.html
提前计算并缓存好高度;异步绘制;滑动时按需加载;
正确使用复用标识符;尽量少用透明图层;尽量少用addView给Cell动态添加View;
3,NSMutableDictionary 的setObject:forKey:与setValue:forKey:的区别
答:object中值不能为空,而且key可以是任何类型,必须实现NSCoding协议的类的对象。value中值可以是空,而且key只能是NSString类型。
4,简述NSThread NSOperation GCD的区别?同步和异步的区别?
答:NSThread是相对轻量级的,需要自己管理线程的生命周期,同步,加锁问题。NSOperation是完全的面相对象的,本身是一个抽象基类。CGD是基于C语言的一套API,更多在于处理多核运算。GCD自己管理线程,我们只需要把添加入队列。
同步和异步的区别在于会不会阻塞当前线程。
同步串行:在当前线程,一个一个执行。
同步并行:在当前线程,一个一个执行。
异步串行:新开线程,一个一个执行。
异步并行:新开很多线程,一并执行。
5,介绍App启动的完全过程,以及影响启动速度的因素?
答:启动过程
1,执行mian函数;
2,执行UIApplicationMain函数,创建UIApplication对象,创建UIApplicationDelegate对象。
3,读取info.plist文件的配置,建立沙箱,权限检查等。
4,创建应用程序的 main RunLoop循环。
5,给代理发送程序启动的代理方法,application:didfinishllaunchoption 。如果info文件里有storyboard,加载,如果没有,则根据代码来创建主window,然后创建根视图控制器。
6,如何判断Cell是否显示在屏幕上?
影响因素:1,减少oc类的数目,减少Category的数目。2,定期扫描不再使用的动态库。
7,简述KVO、KVC,通知,代理,Block的优缺点
KVO:优点:缺点:1,只能用来对属性作出反应,而不会用来对方法或者动作作出反应。2,注意移除观察者。
通知:优点:1,实现简单2,一对多的。缺点:1,在编译期不会检查通知是否能够被观察者正确的处理。2,调试时候很难追踪。3,注册后,需注意释放。
代理:优点:1,运行成本低。只是保存了一个对象指针,直接回调,没有额外消耗。当公共接口较多,用delegate解耦。
block: 优点:1,写法简练。缺点:1,运行成本高。block出栈需要将使用的数据从栈内存拷贝到堆内存,对象的话就是加计数,使用完block置nil才消除。2,需要防止循环引用。
8,typedef struct _ABC{
int a;
long b;
char c;
} ABC;
sizeof(ABC) = 24.
知识点:计算结构题的大小。结构体的大小 =最后一个成员的大小 + 最后一个成员的偏移量。
9,给定一个字符串,实现打印最大数字(0-9为有效数字字符)字符,例如“abc128ef93r”
10,
int a = 1;
void (^block)() = ^(){ NSLog(@"a = %d",a); };
a++;
block();
输出为:a= 1 .注意:在block 中,如果使用了外部参数,那么这些参数都会拷贝一份到block中,无论外部如何变化,block内的不会发生变化。
11,
@interface NSObject (Some)
@property NSInteger type;
@end
@implementation NSObject (Some)
@end
这样是否能通过编译,运行时会有什么问题?
答:能。如果使用type属性的话,会崩溃,因为类别不能增加属性。可以在类别里添加get,seter方法.get用objc_getAssociatedObject(self,@"propertypeName";)set方法用objc_setAssociatedObject(self,@"propertypeName",propertypeName,OBJC_ASSOCIATION_COPY_OBJC_ASSOCIATION_COPY);
12,UIView 与CALayer 区别?
答:1,UIView可以响应事件,Layer不可以。
13,NSArray 与NSSet区别?
答:NSArray是顺序的存放数据,NSSet无序的,底层使用hash实现的,所以查询速度会快一些。
14,用NSLog函数输出一个浮点类型,结果四舍五入,并保留一位小数,写法:
答:float x = 3.4;
NSLog(@"%.1f", roundf(x * 10) / 10);
15,NSCache 与 NSDictionary区别?
答:cache主要用来做缓存。的key不需要实现NSCopying协议。cache可以通过countlimit 限制cache的数量。且在内存吃紧的时候会自动释放。
16,使用NSTimer注意事项????????????????
答:1,NSTimer 是需要配合NSRunLoop 才可以正常工作的。2,
17,对于语句NSString * obj =[[NSData alloc]init]; ,编译和运行时是什么类型的对象?
答:编译时 NSString 运行时NSData.
18,面向对象语言的特点,分别介绍一下。
答:封装:把客观的事物封装成抽象的类。继承:可以使用现有的类的属性和方法,并无需编写原来的类的情况下对这个类进行扩展。多态:不同的对象以自己的方式相应相同的方法。
19,#define F(x,y) X + Y , F (1,2) * F(3,4)
答:21?错!!!你以为(1+2)*(3+4) =3* 7 =21;
在C语言里面,宏只是简单的文本替换,所以表达式为:
1 + 2 *3+ 4 =1 +6+ 4 = 11,正确答案为11。
20,view的frame和bounds的区别是什么?
答:frame:该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)bounds:该view在自身坐标系统中的位置和大小。(参照点,自己的坐标)
21,在一个对象释放前,如果他被加到了notifacationcenter 中,不在notificationcenter中remove这个对象可能会出现什么问题?
答:崩溃。
22,app在上线过程中在构建完版本之后可以选择的发布方式分别是什么?
答:Xcode,Application Loader
23,NSLog(@"%ld %ld %ld %ld ",sizeof (char), sizeof(char[2]) ,sizeof(char *),sizeof((char *)(124)));这句话在32位系统下输出结果是什么?
答:1,2,8,8 第一个,char字符型1的长度;第二个,XX;第三个,是指针的大小,32位计算为4,64位计算机为8。
24,NSUserDefaults是什么,可以存储的数据类型?
答:plist文件。NSNumber、NSString、NSArray、NSDictionary、NSData、NSDate、
26.OC可以多重继承么,可以实现多个接口?
答:不可以。可以多个接口
27,GIF图展示的原理
答:
28 ,哈希表
答:散列表(hash table)是根据关键码值而直接进行访问的数据结构。字典的底层是一个哈希表。
29 ,cell上控件的点击事件和cell选中事件的冲突
答:gestureRecognizer
if([NSStringFromClass([touch.viewclass]) isEqualToString:@"UITableViewCellContentView"]) {//返回为NO则屏蔽手势事件returnNO; }
30 ,MVC模式,MVVM模式。
答:
31,语音推送。
答:
32 ,缓存机制
答: