yyny1789 / InterviewPreparation

面试准备~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

面试准备

基础问题

  1. UIViewCALayer 是什么关系?

    @property(nonatomic,readonly,strong) CALayer  *layer; // returns view's layer. Will always return a non-nil value. view is layer's delegate

    由此可见 UIViewCALayer 的主要关系是:UIViewCALayer 的 delegate。

    除此之外:每个 UIView 都有一个 CALayerUIView 可以响应触摸事件,而 CALayer 不可以,UIView 主要侧重对显示内容的管理,而CALayer 主要侧重对显示内容的绘制。

  2. BoundsFrame 的区别?

    Bounds:该 view 在本地坐标系统中的位置和大小。

    Frame:该 view 在父 view 坐标系统中的位置和大小。

    BoundsFrame 的 width、height 并不一定相等,在当 view 做 旋转 transform 时,就不相等。

  3. 如何高性能的画一个圆角?

    UIView:使用 Core Graphics 画出一个圆角 image,然后把 image 添加到 view 的最底层。

    UIImageView:使用 Core Graphics 直接截取 UIImageView 的 image。

    参考资料

  4. loadInitialize 的区别?

    load 在这个文件被程序装载时调用,initialize 在第一次给某个类发送消息时调用。前者在 main 函数之前调用,后者在之后调用。

    load initialize 方法都不用显示的调用父类的方法而是自动调用,即使子类没有 initialize 方法也会调用父类的方法,而 load 方法则不会调用父类。

    load 方法通常用来进行 Method Swizzle,initialize 方法一般用于初始化全局变量或静态变量。

    loadinitialize 方法内部使用了锁,因此它们是线程安全的。实现时要尽可能保持简单,避免阻塞线程,不要再使用锁。

    参考资料

  5. Designated Initializer 的规则?

    ① 便利初始化函数只能调用自己类中的其他初始化方法。

    ② 指定初始化函数才有资格调用父类的指定初始化函数。

  6. LoadView 方法的作用?

    - (void)loadView; // This is where subclasses should create their custom view hierarchy if they aren't using a nib. Should never be called directly.

    用来自定义一个 view 给 viewController 使用。

  7. 说一下控制器 View 的生命周期,一旦收到内存警告该如何处理?

    生命周期: init -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> dealloc

    内存警告:当 App 收到内存警告时,会调用 view controllerdidReceiveMemoryWarning 方法,所以在 didReceiveMemoryWarning 里做一些减少内存的操作。

    override func didReceiveMemoryWarning() {
           	super.didReceiveMemoryWarning()
            
            if self.isViewLoaded && self.view.window == nil {
                self.view = nil
            }
            self.dataArr.removeAll()
        }
  8. 简述事件传递、事件响应机制。

    南峰子的这篇 UIKit: UIResponder 文章介绍的很详细。

  9. 怎样扩大 UIButton 点击范围?

    UIButton: Making the hit area larger than the default hit area

    需要理解 UIKit:UIResponder。

  10. setNeedsLayoutlayoutIfNeeded 的关系?

// Allows you to perform layout before the drawing cycle happens. -layoutIfNeeded forces layout early
- (void)setNeedsLayout;
- (void)layoutIfNeeded;

setNeedsLayout :标记为需要重新布局,不立即刷新,在下一轮 runloop 结束前刷新。

layoutIfNeeded :如果有需要刷新的标记,立即调用 layoutSubviews 进行布局。

这两个方法一般是配套使用,也可单独使用。

  1. RunLoop 是什么?

    深入理解RunLoop

    iOS线下分享《RunLoop》by 孙源@sunnyxx

经验问题

哲学问题

算法

参考

  1. iOS 开发者面试题集锦
  2. 《招聘一个靠谱的 iOS》参考答案
  3. 面试 iOS 开发时可以问的一些问题

About

面试准备~

License:MIT License