• 面试问题1


    一.简述对 view,viewcontroller, calayer window 的理解
    UIView:属于UIkit.framework 框架,负责渲染矩形区域的内容,为矩形区域添加动画,响应区域的触摸事件,布局和管理一个或多个子视图

    UIWindow:属于UIKit.framework 框架,是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。UIWindow 在程序中主要起到三个作用:
    1、作为容器,包含 app 所要显示的所有视图 2、传递触摸消息到程序中view 和其他对象

    3、与UIViewController 协同工作,方便完成设备方向旋转的支持
    CAlayer:属于 QuartzCore.framework,是用来绘制内容的,对内容进行动画处理依 赖与 UIView 来进行显示,不能处 理用户事件。

    UIView CALayer 是相互依赖 的,UIView 依赖 CALayer 提供内容,CALayer 依赖UIView 一共容器显示绘制内容。

    延伸: UIViewController:管理视图的几成熟,每个视图控制器都有一个自带的视图, 并且负责这个视图相关的一切事务。

    方便 管理视图中的子视图,负责 model view 的通信;检测设备旋转以及内存警告;是所有视图控制类的积累,定义了控制 器 的基本功能。

    二. 说明 UIViewController 类成员函数:
    InitWithNibName:boundle; /dealloc/loadView/viewDidLoad/viewDidUnload 调用顺序,每个方法应 该做的工作是什么?(5 分)

    1.InitWithNibName:boundle:
    初始化 UIViewController,执行关键数据初始化操作

    2.loadView:  当访问 UIViewController view 属性时,view 如果此 时是 nil,那么 VC 会自动调用 loadView 方法来初始化一个 UIView 并赋值给 view 属性
    3.viewDidLoad:  当 VC view 对象载入内存后调用,用于对 view 进 行额外的初始化操作
    4.viewDidUnload: VC view 对象从内存中释放之后调用,可以在 view 被释放后做 一些 view 相关的引用清理操作,此时 view nil。在 iOS6.0 开始就 废弃了,该方法不再会调用
    5.dealloc:UIViewController 对象销毁的时候调用

    三. 说明 UiView 类属性 frame/center/bounds 的联系与区别,改变 bounds 的值会不会对 frame center 造成改变;

    Frame 指的是:该 view 在父 view 坐标系统中的位置和大小(参照点是 父类的坐标系统)

    Bounds 指的是:该 view 在本身坐标系统中的位置和大小(参照点是本 身的

    Center:相对于父视图坐标系的中心点坐标
    改变 bounds 的值不会对 frame center 造成改变

    四.说说你了解以及日常使⽤的版本控制系统,以及它们的优缺点
    SVN 优点:除包括了 CVS 的⼤大多数特点外,还有⼀一些如:⽂文件⽬目录可以⽅方便的 改名、基于数据库的版本库、操作速度提升、权限管理更完善等功能⾮非常好 ⽤用。

    SVN 缺点:代码库不是分布式,⽽而是集中在⼀一个地⽅方,所以导致跨国访问的时 候速度很慢,远程发开⾮非常不利。其次由于代码库只有⼀一份,特别是元数据都 存在服务器上,所以当服务器崩溃的时候损失严重。

    GIT 优点:是免费、开源、它采⽤用了分布式版本库的⽅方式,不必服务器端软件 ⽀支持,使源代码的发布和交流极其⽅方便。每⼀一个 GIT 克隆都是⼀一个完整的⽂文件 库,含有全部历史记录和修订追踪能⼒力。其最⼤大特⾊色就是“分⽀支”及“合并”操作 快速、简便。⽀支持离线⼯工作,GIT 是整个项⽬目范围的原⼦子提交,⽽而且 GIT 中的 每个⼯工作树都包含⼀一个具有完整项⽬目历史的仓库。

    GIT 缺点:对 windows 以及中⽂文的⽀支持不是很好。

    五. 你了解的设计模式

    MVC设计模式 单例模式 代理模式 通知模式 工厂模式 适配器模式

    简单介绍集中设计模式:

    1)模型视图控制器(MVC)。控制器负责行为,模型提供数据源,视图显示UI。 模型和视图之间尽量不要直接打交道,他们之间的交互应该通过控制器来进 行,控制器充当着桥梁的作用。这样设计的目的是使不同功能的类之间尽量 解耦,以利于程序的扩展。
    2)代理模式 委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去 做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程 序中,首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。 这里所做的内容是靠协议中的方法来实现,方法分两种:必需实现(@required) 的方法和根据情况选择实现(@optional)的方法。 举个例子:你是房屋租赁中介,某个房东和你签订协议,请你替他把房子出 租出去。这时,你就是房东的代理,你必须实现的方法是把屋子出租出去, 选择实现的方法是装修、添置家具、打隔断等(依据协议而定)。 3)通知模式 通知模式是观察者模式的一种。a对象在通知中心注册了观察者之后,b对象发出通知广播,a对象收到通知后就知道去做具体的事。观察者可以是一个或 多个,也可以没有。举个例子:微博切换帐号后会发出一个通知,让多个界 面重新刷新数据。
    4)KVO模式 Key-Value-Observer模式也是观察者模式的一种。KVO的机制为:当指定的被 观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。举个例 子,在控制器里通过addObserver:forKeyPath:options:context:注册一个数 据源观察者,当数据源里的数据发生变化时,通过willChangeValueForKey: 和didChangeValueForKey:这一对方法发出广播,控制器收到广播后就可以利 用新的数据来刷新界面。

    5)单例模式 通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从 而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能 存在一个,单例模式是最好的解决方案。

  • 相关阅读:
    How to use VS2012 remote debug Windows Azure Cloud Services
    vue ---05 分页和详情页功能的实现
    vue ----04课程列表的展示
    vue--03 首页和登陆注册
    luffy--03 首页和登陆注册(跨域问题的解决)
    luffy--02 ---项目配置和数据库链接
    luffy---01
    DRF---一些配置/设置
    drf-路由
    drf视图
  • 原文地址:https://www.cnblogs.com/xuhongwei/p/4954882.html
Copyright © 2020-2023  润新知