美文网首页
面试总结

面试总结

作者: 小饼干是只松鼠 | 来源:发表于2017-08-02 08:53 被阅读11次

面试题

技术

基础

  1. 为什么说Objective-C是一门动态的语言?

    Objective-C 运行时机制是在运行的时候才决定一个对象的类型,消息机制是在运行的时候通过发送消息来调用函数,也正因为运行时机制把编译时的工作转到运行时实现OC的动态特性。

  2. 讲一下MVC和MVVM,MVP?

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,Model 呈现数据,View 呈现用户界面,而 View Controller 调节它两者之间的交互。

    • 视图(View):构建UI的类;例如:按钮,标签,进度条等。
    • 模型(Model):视图类所需要的数据;例如:表格需要显示的文字。
    • 控制器(Controller):连接视图类和模型类,任务是使数据显示在屏幕上。

    MVVM全名是Model View View-Model,ViewModel将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。就是那些将 Model 数据转换为 View 可以呈现的东西的事情,例如将一个 NSDate 转换为一个格式化过的 NSString。

    MVP全名是Model-view-presenter,是使用者界面设计模式的一种。

    • Model 定义使用者界面所需要被显示的数据模型,一个模型包含着相关的业务逻辑。
    • View 视图为呈现使用者界面的终端,用以表现来自 Model 的数据,和使用者命令路由再经过 Presenter 对事件处理后的数据。
    • Presenter 包含着元件的事件处理,负责检索 Model 取得数据,和将取得的数据经过格式转换与 View 进行沟通。
    • MVP 设计模式通常会再加上 Controller 做为整体应用程序的后端程序工作。
  1. 为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?
  1. 属性的实质是什么?包括哪几个部分?属性默认的关键字都有哪些?@dynamic关键字和@synthesize关键字是用来做什么的?

    • @property 的本质是: @property = ivar + getter + setter;

    • 包括哪几个部分: iavr ; getter ; setter;``(实例变量 + 存取方法)

    • 属性默认的关键字都有哪些 atomic readwrite assign

    • @dynamic关键字和@synthesize关键字是用来做什么的?

      • 1)@property有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var;
      • @synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法。
      • @dynamic告诉编译器:属性的setter与getter方法由用户自己实现,不自动生成。
  2. 属性的默认关键字是什么?

    atomic readwrite assign

  3. *NSString为什么要用copy关键字,如果用strong会有什么问题?(注意:这里没有说用strong就一定不行。使用copy和strong是看情况而定的) *

    • 因为NString,NSArray,NSDictionary都有自己对应的子类:NSMutableString,NSMutableArray,NSMutableDictionary,而父类指针可以指向子类对象,使用copy可以让本对象不受外界(子对象)影响,无论给我传入的是一个可变对象还是一个不可变对象,都能保证自身持有的是一个不可变副本。
    • 使用strong时,如果这个属性指向一个可变对象,修改可变对象时,这个属性值也会被修改。
    • 引用借鉴:http://www.jianshu.com/p/1e1a6f9c26f8
  1. 如何令自己所写的对象具有拷贝功能?

若想令自己所写的对象具有拷贝功能,则需实现 NSCopying 协议。如果自定义的对象分为可变版本与不可变版本,那么就要同时实现 NSCopying 与 NSMutableCopying 协议。

具体步骤:

需声明该类遵从 NSCopying 协议
实现 NSCopying 协议。该协议只有一个方法:
- (id)copyWithZone:(NSZone *)zone;
注意:一提到让自己的类用 copy 修饰符,我们总是想覆写copy方法,其实真正需要实现的却是 “copyWithZone” 方法。
  1. 可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?

    • [immutableObject copy]是浅拷贝
    • [immutableObject mutableCopy]是深拷贝
    • [mutableObject copy]是深拷贝
    • [mutableObject mutableCopy]是深拷贝

    集合对象的深拷贝只是对象本身,而集合对象的元素还是地址的拷贝,即单层深拷贝

  2. 为什么IBOutlet修饰的UIView也适用weak关键字?

    通过加载xib得到的用户界面,在加载时就已经是view hierarchy(视图层次)的一部分了,后者中的指向都是strong的,因此IBOut指向的对象不该再被hold一次,从而不需要在viewDidUnload方法里再将IBOut指向的对象置为nil.

  3. nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?

    atomic和nonatomic区别用来决定编译器生成的getter和setter是否为原子操作。atomic提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择了atomic 那么就是说,系统会自动的创建lock锁,锁定变量。nonatomic禁止多线程,变量保护,提高性能。
    * atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况下,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。
    * nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。
    * 不过atomic可并不能保证线程安全,atomic只是对setter和getter方法加锁;要想实现真正的线程安全,需要对对象进行加锁,读取操作结束的时候再开放给其他线程访问。

  1. UICollectionView自定义layout如何实现?

    自定义UICollectionViewLayout重写以下方法:

    - (void)prepareLayout
    准备方法被自动调用,以保证layout实例的正确。
    
    - (CGSize)collectionViewContentSize
    返回collectionView的内容的尺寸
    
    - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
     1.返回rect中的所有的元素的布局属性
     2.返回的是包含UICollectionViewLayoutAttributes的NSArray
     3.UICollectionViewLayoutAttributes可以是cell,追加视图或装饰视图的信息,
     通过不同的UICollectionViewLayoutAttributes初始化方法可以得到不同类型的UICollectionViewLayoutAttributes:
     1)layoutAttributesForCellWithIndexPath:
     2)layoutAttributesForSupplementaryViewOfKind:withIndexPath:
     3)layoutAttributesForDecorationViewOfKind:withIndexPath:
    
    - (UICollectionViewLayoutAttributes )layoutAttributesForItemAtIndexPath:(NSIndexPath )indexPath
    返回对应于indexPath的位置的cell的布局属性
    
    - (UICollectionViewLayoutAttributes )layoutAttributesForSupplementaryViewOfKind:    (NSString )kind 
    atIndexPath:(NSIndexPath *)indexPath
    返回对应于indexPath的位置的追加视图的布局属性,如果没有追加视图可不重载
    
    - (UICollectionViewLayoutAttributes * )layoutAttributesForDecorationViewOfKind: (NSString)decorationViewKind
    atIndexPath:(NSIndexPath )indexPath
    返回对应于indexPath的位置的装饰视图的布局属性,如果没有装饰视图可不重载
    
    - (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
    当边界发生改变时,是否应该刷新布局。如果YES则在边界变化(一般是scroll到其他地方)时,将重新计算    需要的布局信息。
    

    选自:UICollectionViewLayout布局详解

  2. 3241

  3. 32424

  4. 34dsfsd

相关文章

网友评论

      本文标题:面试总结

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