美文网首页
iOS面试题

iOS面试题

作者: mengyingguo | 来源:发表于2017-05-26 16:31 被阅读0次

    面试题集合:http://www.cnblogs.com/markstray/p/5615040.html
    1.ARC下什么时候使用Strong,什么时候使用Weak,如何避免循环引用?

    ARC下,是Xcode编译器自动判断是否有强指针引用着对象,从而自动帮我们在恰当的位置加上引用计数加一或减一的代码<retain/release/autorelease>。使用Strong就表明这个OC对象是被使用强指针引用的。
    因此,我们自己定义的需要使用的OC属性(UI控件除外)时,一般使用Strong;UI控件一般使用weak,因为在UI控件通常被父控件的subViews数组强引用着。
    首先,循环引用的意思是两个对象互相强引用着(或者多个对象引用循环),造成互相都无法释放,效果类似与‘死锁’。避免循环引用的方式是将其中一个对象设置为weak。我印象比较深的在使用block时造成的循环引用,例如使用AFN的时候

    // 在AFN的block内使用,防止造成循环引用
     __weak typeof(self) weakSelf = self;
     [[AFHTTPSessionManager manager] GET:CYXRequestURL parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { NSLog(@"请求成功"); 
    // 利用MJExtension框架进行字典转模型 
    weakSelf.menus = [CYXMenu objectArrayWithKeyValuesArray:responseObject[@"result"]]; 
    // 刷新数据(若不刷新数据会显示不出)
     [weakSelf.tableView reloadData];
     } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) { NSLog(@"请求失败 原因:%@",error); }];
    

    2.将一个MRC的项目转换为ARC的项目,应该遵循什么规则?

    (我也不太确定,猜的)规则难道是,需要转换为ARC文件的就转换,,不需要转换的就不转换?过滤掉无需转换的文件(不支持ARC的文件)。无需转换的文件应添加-fno-objc-arc标记

    3.Objective-C如何对内存管理的,有哪些情况会导致崩溃,说说你的看法和解决方法?

    (...上面已经问过ARC了,这题我猜是问iOS系统的内存管理原则了吧?)
    当App收到三次内存警告还不做处理时,会造成闪退。
    处理方法:在didReceiveMemoryWarning内释放不必要的资源。

    4.简述GCD是如何简化线程编程的?

    GCD相对于pthread/NSThread,通过自动管理线程的生命周期,从而简化了线程编程。

    5.Extensions有哪些类型,每种类型可以完成的功能有哪些?

    (那时候有几个忘了....)六种类型:Today、Share、Action、Photo Editing、Storage Provider、Custom keyboard
    完成的功能可以顾名思义

    6.MVVM是什么,请简述MVVM的特点以及解决了哪些问题

    M(Model)V(View)VM(ViewModel),是一种View层的架构模式,衍生自MVC。
    特点:把数据加工的任务从Controller中移到了ViewModel,使得Controller只需要专注于数据调配的工作,ViewModel则去负责数据加工并通过通知机制让View响应ViewModel的改变。
    目标:为MVC中的Controller减负

    7.NSPersistentStoreCoordinator\\NSManagedObjectContext和NSManagedObject三者什么关系

    CoreData里面的属性,NSPersistentStoreCoordinator:持久性数据协调器;NSManagedObjectModel:管理数据模型;NSManagedObjectContext:管理数据内容。三者的关系:CoreData根据NSManagedObjectModel对象确定如何将底层的持久化文件中的数据映射为NSManagedObject对象。
    对于数据持久化的操作,我使用比较多的是通过FMDB框架操作SQLite,因为CoreData是基于OC封装了SQLite,性能并没有SQLite好。例如GCD性能比NSOperation好。

    8.什么是VFL,请说出“H:[_aImageView(==50)]-10-[_aButton]”代表的意思?

    VFL:苹果为了简化手写Autolayout代码发明出来的,好像叫可视化格式语言(表示真的很久没用过啊!自从发现了Masonry),那行代码的意思应该是设置水平方向的约束。
    手写Autolayout代码我一般使用第三方框架:Masonry。用Masonry写出来的代码的可读性非常好。

    相关文章

      网友评论

          本文标题:iOS面试题

          本文链接:https://www.haomeiwen.com/subject/dgcxfxtx.html