• iOS面试题


    几道iOS面试题


    1. delegate中的property使用以下哪个属性(A)
    • assign
    • retain
    • copy
    • strong
    解析:

    选 A ;避免循环引用!那么就要知道循环引用是怎么来的?比如,使用 tableview 的时候我们会设置他的 delete;可能一般情况下是你的 viewcontroller 对象;viewcontroller 持有着这个 tableview,如果 tableview 不使用 assign (arc 使用 weak) 的话,那么就造成了 tableview 持有viewcontroller,即 相互持有,最终结果是 viewcontroller 内存泄露,释放不掉了;这是一个很严重的问题!viewcontroller 是一个很大的对象!

    B,D 是一个意思,都是持有(保留);copy的话就更不可能了,原因很简单, tableview 怎么知道他的delete 有没有实现 copying 协议呢!


    1. 关于Objective-C中属性的说明,以下错误的是(D)
    • readwrite是可读可写特性,需要生成getter方法和setter方法
    • readonly是只读特性,只有getter方法,没有setter方法
    • assign是赋值属性,setter方法将传入参数赋值给实例变量
    • retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象
    解析:

    Copy是创建一个新对象,Retain是创建一个指针,引用对象计数加1。

    Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。

    Retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝


    1. 下面对category描述不正确的是(B)
    • category可以添加新的方法
    • category可以删除修改之前的方法
    • 将类的实现分散到多个不同文件或多个不同框架中
    • 创建对私有方法的前向引用
    解析:

    类别是一种为现有的类添加新方法的方式。利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的 class 添加方法,包括那些没有源代码的类(如某些框架类),但不能删除修改之前的方法。

    类别主要有3个作用:

    (1)可以将类的实现分散 到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。

    (2)创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告

    (3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。


    1. NSRunLoop的以下描述错误的是(C)
    • Runloop并不是由系统自动控制的
    • 有3类对象可以被run loop监控:sources,timers,observers
    • 线程是默认启动run loop的
    • NSTimer可手动添加到新建的NSRunLoop中
    解析:

    A:Runloop的作用在于当有事情要做时它使当前的thread工作,没有事情做时又使thread 休眠sleep。Runloop并不是由系统自动控制的,尤其是对那些新建的次线程需要对其进行显示的控制。

    B:有3类对象可以被run loop监控:sources、timers、observers。当这些对象需要处理的时候,为了接收回调,首先必须通过 CFRunLoopAddSource ,CFRunLoopAddTimer 或者 CFRunLoopAddObserver 把这些对象放入run loop。 要停止接收它的回调,可以通过CFRunLoopRemoveSource从run loop中移除某个对象。

    C:每一个线程都有自己的runloop, 主线程是默认开启的,创建的子线程要手动开启,因为NSApplication 只启动main applicaiton thread。

    D:NSTimer默认添加到当前NSRunLoop中,也可以手动制定添加到自己新建的NSRunLoop的中。


    1. 单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的通知机制。(对)
    • 解析:NSNotificationCenter监听通知是KVO

    1. 判断:从通讯录数据库查询联系人数据,可通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得。(对)
    • 解析: 从通信录数据库查询联系人数据是无法使用SQL语句,只能通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得.
      ABAddressBookCopyArrayOfAllPeople函数是查询所有的联系人数据。ABAddressBookCopyPeopleWithName函数是通过人名查询通讯录中的联系人,其中的name参数就是查询的前缀关键字。

    1. NSURLConnection类的同步请求方法是?(A)
    • +sendSynchronousRequest:returningResponse:error:
    • –initWithRequest:delegate:
    • –initWithRequest:delegate: startImmediately:
    解析:

    B和C都是异步方法,需要设置delegate属性。


    1. genstrings命名的基本语法:genstrings [-a] [-q] [-o] sourcefile(对)
    解析:

    下面是genstrings命名的基本语法:

    genstrings [-a] [-q] [-o ] sourcefile

    其中参数:

    -a 在存在的文件后面追加内容

    -q 关闭多个键/值对的警告

    -o 指定输出目录

    因此如果我们想输出到en.lproj目录,则代码如下:

    genstrings -o en.lproj *.m


    1. 下面哪些属于UITableViewDelegate协议的方法?
    解析:

    代理的作用是用来完成指定的某种动作,所以必须是动作性的操作而不是数据性的操作


    1. 平铺导航模式是在内容组织上没有层次关系,展示的内容都放置在一个主屏幕上,采用分屏或分页控制器进行导航,可以左右或者上下滑动屏幕查看内容。(对)
    解析:

    A,平铺导航模式是指内容间没有从属关系,主要涉及的控件UIPageControl和UIScrollView.因此A答案正确


    1. UIPopoverController控制器的常用方法和属性?(ABCD)
    • presentPopoverFromBarButtonItem:permittedArrowDirections:animated:呈现Popover视图方法
    • dismissPopoverAnimated: 关闭Popover视图方法
    • popoverVisible,判断Popover视图是否可见
    • popoverArrowDirection,判断Popover视图箭头的方向
    解析:

    abcd都对,但这个类在9.0之后被Deprecated 了


    1. 模态视图专用属性有哪些?(ABCD)
    • UIModalPresentationFullScreen,全屏状态,是默认呈现样式,iPhone只能全屏呈现。
    • UIModalPresentationPageSheet,它的宽度是固定的768点,在iPad竖屏情况下则全屏呈现。
    • UIModalPresentationFormSheet,它的是固定的540x620点,无论是横屏还是竖屏情况下呈现尺寸都不会变化。
    • UIModalPresentationCurrentContext,它与父视图控制器有相同的呈现方式。

    1. iOS单元测试框架有哪些?(ABC)
    • OCUnit
    • GHUnit
    • OCMock
    • NSXML
    解析:

    OCUnit和XCTest都是官方的测试框架,OCUnit已经过时被XCTest所取代。

    GHUnit和OCMock都是第三方的测试框架,其官方地址分别为:https://github.com/gh-unit/gh-unit,https://github.com/erikdoe/ocmock


    1. NSURLConnectionDelegate协议中的方法有哪些?(ABD)
    • connection:didReceiveData:
    • connection:didFailWithError:
    • initWithRequest:delegate:
    • connectionDidFinishLoading:
    解析:

    单 看 NSURLConnectionDelegate ,答案只有 B ,而 A 和 D 属于 NSURLConnectionDataDelegate 。

    仔 细 看 NSURLConnectionDataDelegate 的声明:

    @protocol NSURLConnectionDataDelegate
    可以知道 A 和 D 也正确

    1. NSURLRequest的构造函数有?(ABCD)
    • +requestWithURL:
    • –initWithURL:
    • +requestWithURL:cachePolicy:timeoutInterval:
    • –initWithURL:cachePolicy:timeoutInterval:
    解析:

    ac-构造函数
    bd-初始化函数
    构造函数就是初始化函数


    1. iOS应用导航模式有哪些?(ABC)
    • 平铺导航模式
    • 标签导航模式
    • 树形结构导航模式
    • 模态视图
    解析:

    A:平铺模式,一般由scrollView和pageControl组合而成的展示方式。手机自带的天气比较典型。
    B:标签模式,tabBar的展示方式,这个比较常见。
    C:树状模式,tableView的多态展示方式,常见的9宫格、系统自带的邮箱等展现方式。

    A平铺 UIPagecontroller B标签 UITabBarcontroller C 树形 UINavigationcontroller


    1. 使用genstring工具可以扫描的宏是有哪些?(全选)
    • CFCopyLocalizedString
    • CFCopyLocalizedStringFromTable
    • CFCopyLocalizedStringFromTableInBundle
    • CFCopyLocalizedStringWithDefaultValue
    • NSLocalizedString
    • NSLocalizedStringFromTable
    • NSLocalizedStringFromTableInBundle
    • NSLocalizedStringWithDefaultValue
    解析:

    详细的解释可以看一下这篇博客,其实只要自己用一下genstrings并且看看那几个宏是怎么回事就理解了。
    http://blog.csdn.net/abc649395594/article/details/49934117

    个人:其实这道题看到有local我都会选,因为应该都是涉及到本地化。


    1. 在UIViewController类中与模态相关方法有哪些?(AB)
    • presentViewController:animated:completion:
    • dismissViewControllerAnimated:completion:
    • addChildViewController:
    • removeFromParentViewController
    解析:AB,模态:视图切换

    1. iOS中导航设计模式有几种?(ABC)
    • 平铺导航
    • 标签导航
    • 树形导航
    • 模态视图导航
    解析:

    A B C

    我们经常会遇到在某个路径中滑出一个单屏、进行编辑、查看信息、操作界面的上的内容的情况发生。这是一种应用行为的特定形态,一般带有流程的界面变更的情况发生,比如一张页面临时取代了整个应用程序的显示屏,我们称这种处理方式为“模态视图”。默认情况下,模式视图从屏幕底部边缘滑上来切一半覆盖了当前整个屏幕,模态视图完成和程序主功能有关系的独立任务,尤其适合于主功能界面中欠缺的多级子任务。这种操作会暂时绕开应用的正常操作。

    模态视图常常被用来编辑或添加内容,当你需要的时候模态视图一般从屏幕底部滑出而后遮盖先前的页面,当你完成任务后滑出的页面也会相应的缩回去,然后可以继续之前的流程。有些控件和界面元素只在次要任务中被偶尔用到,模态视图很好的把他们暂时隐藏了,并且当需要的时候出现,有效的节约了屏幕空间。

    模态视图有点像是导航中的死胡同,为了能够让用户也可以同样方便的回到正常的流程中去,模态视图除了正常的操作之外一般还有加上一个“完成”按钮,或者“取消”按钮。

  • 相关阅读:
    Map和Set
    js基本语法入门
    js中变量的作用域,let,const详解
    循环结构
    方法
    只有分享才能一起进步
    培训随笔
    得食相呼,义也
    Wall.e
    《国学之大智慧》观感
  • 原文地址:https://www.cnblogs.com/songlei0601/p/5873468.html
Copyright © 2020-2023  润新知