【面试题目】第二篇

来源:互联网 发布:淘宝怎样开通全球购 编辑:程序博客网 时间:2024/06/03 21:46

1.描述oc中category和Extension的区别 并分别列举使用场景

 分类和扩展是OC中的特殊语法。

OC是一门面向对象的语言,支持面向对象特性。在语言设计的角度讲,类别符合开闭原则,对修改关闭,对扩展开放。

协议和分类正是此类。

分类是为类提供额外的接口和实现,但是不能添加属性。

扩展是私有化方法和属性的,对外访问是封闭的。

以图片下载为例,如果在详细的使用场景中需要多次使用下载图片功能 需要将其封装出来,那么我们需要选择哪种方法?

系统并没有提供相关API,下载图片的话 我们需要多次使用,也就是说 我们不需要这个方法私有,而需要它是可以被多次访问,于是选择分类。

以修改某个自定义控件的内容为例,我们只有在这个控件内部才会修改,而对外部访问是关闭的。于是需要这个方法私有,所以选择扩展。

2.非arc用block 需要注意?

1)使用block需要判空

2)在使用self或者成员变量的情况下需要用__weak修饰

3)block 在使用之后要赋空值处理,如果是MRC 要release掉。block对象

4)多线程环境中,block中的weak修饰的self可能在使用之前就被析构掉了,因此需要将self先转为strong指针,避免在运行到某个关键步骤时self对象被析构。

2,4被称为weak -strong dance

3.UITableview重用 重用的作用?

重用,简单来讲就是重复使用。UITableView内部有一个重用cell的栈,tableview初始化之后显示在屏幕上之前会初始化创建几个可以被看见的cell。当滑动cell至看不见时,就把他放入复用栈中。当需要显示cell的时候 根据cell的identifier ID去复用栈中去找。找到就使用,找不到根据cell的ID新创建。

复用提高了性能,iOS内存有限,提高了内存的使用效率

4.UIView在UIViewcontroller使用延迟加载 而在实际项目中有情况需要提前加载 以方便一些视图的初始化工作 怎么解决因为延迟载入而导致的空指针问题?

分情况考虑。需要延迟加载的时候,就使用延迟加载,如果需要提前加载,在控制器view显示之前先准备一个view。(不知道对不对 个人观点)

5.方法awakefromnib会在nib加载完成之后调用但是在uiviewcontroller中这个方法有时调用有时不调用 列举调用和不调用的情况

控制器通过nib初始化有两种方法,

1)initWithNibNamed 这种方法是延迟加载的,view上的控件为nil,只有在需要显示的时候 才不是nil 不会调用awakefromnib

2)loadNibNamed 是实时加载的,会调用awakefromnib方法

awakeFromNib是在nib文件中所有对象在都加载和初始化完毕之后才会被发送给结构中的对象消息。因此,initWithNibNamed不会调用awakeFromNib方法,而loadBuvNamed会调用。

6.给出UIView实例 查找该view及子节点中HXView的实例 (只有一个HXView)

递归。

-(void)test:(UIView *)view{    NSArray * arr = view.subviews;    for (int i = 0;i <[arr count];i++) {        UIView * v = arr[i];        if( [NSStringFromClass( [v class] ) isEqualToString:@"HXView"])        {            NSLog(@"找到");        }else        {        [self test:v];        }    }}

7.常用第三方库的名称功能

参见链接 :iOS常用的三方库:http://blog.csdn.net/a316212802/article/details/49962115

8.内存测试

留坑来答。

0 0
原创粉丝点击