### 几道iOS面试题
- 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 协议呢!
- 关于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 是内容拷贝
- 下面对category描述不正确的是(B)
- category可以添加新的方法
- category可以删除修改之前的方法
- 将类的实现分散到多个不同文件或多个不同框架中
创建对私有方法的前向引用
解析:
类别是一种为现有的类添加新方法的方式。利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的 class 添加方法,包括那些没有源代码的类(如某些框架类),但不能删除修改之前的方法。
类别主要有3个作用:
(1)可以将类的实现分散 到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。
(2)创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
(3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。
- 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的中。
- 单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的通知机制。(对)
- 解析:NSNotificationCenter监听通知是KVO
- ---
- 判断:从通讯录数据库查询联系人数据,可通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得。(对)
- 解析: 从通信录数据库查询联系人数据是无法使用SQL语句,只能通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得.
ABAddressBookCopyArrayOfAllPeople函数是查询所有的联系人数据。ABAddressBookCopyPeopleWithName函数是通过人名查询通讯录中的联系人,其中的name参数就是查询的前缀关键字。
---
- NSURLConnection类的同步请求方法是?(A)
- +sendSynchronousRequest:returningResponse:error:
- –initWithRequest:delegate:
–initWithRequest:delegate: startImmediately:
解析:
B和C都是异步方法,需要设置delegate属性。
genstrings命名的基本语法:genstrings [-a] [-q] [-o] sourcefile(对)
解析:
下面是genstrings命名的基本语法:
genstrings [-a] [-q] [-o ] sourcefile
其中参数:
-a 在存在的文件后面追加内容
-q 关闭多个键/值对的警告
-o 指定输出目录
因此如果我们想输出到en.lproj目录,则代码如下:
genstrings -o en.lproj *.m
下面哪些属于UITableViewDelegate协议的方法?
解析:
代理的作用是用来完成指定的某种动作,所以必须是动作性的操作而不是数据性的操作
平铺导航模式是在内容组织上没有层次关系,展示的内容都放置在一个主屏幕上,采用分屏或分页控制器进行导航,可以左右或者上下滑动屏幕查看内容。(对)
解析:
A,平铺导航模式是指内容间没有从属关系,主要涉及的控件UIPageControl和UIScrollView.因此A答案正确
- UIPopoverController控制器的常用方法和属性?(ABCD)
- presentPopoverFromBarButtonItem:permittedArrowDirections:animated:呈现Popover视图方法
- dismissPopoverAnimated: 关闭Popover视图方法
- popoverVisible,判断Popover视图是否可见
popoverArrowDirection,判断Popover视图箭头的方向
解析:
abcd都对,但这个类在9.0之后被Deprecated 了
- 模态视图专用属性有哪些?(ABCD)
- UIModalPresentationFullScreen,全屏状态,是默认呈现样式,iPhone只能全屏呈现。
- UIModalPresentationPageSheet,它的宽度是固定的768点,在iPad竖屏情况下则全屏呈现。
- UIModalPresentationFormSheet,它的是固定的540x620点,无论是横屏还是竖屏情况下呈现尺寸都不会变化。
- UIModalPresentationCurrentContext,它与父视图控制器有相同的呈现方式。
- --
- iOS单元测试框架有哪些?(ABC)
- OCUnit
- GHUnit
- OCMock
NSXML
解析:
OCUnit和XCTest都是官方的测试框架,OCUnit已经过时被XCTest所取代。
GHUnit和OCMock都是第三方的测试框架,其官方地址分别为:https://github.com/gh-unit/gh-unit,https://github.com/erikdoe/ocmock
- NSURLConnectionDelegate协议中的方法有哪些?(ABD)
- connection:didReceiveData:
- connection:didFailWithError:
- initWithRequest:delegate:
connectionDidFinishLoading:
解析:
单 看 NSURLConnectionDelegate ,答案只有 B ,而 A 和 D 属于 NSURLConnectionDataDelegate 。
仔 细 看 NSURLConnectionDataDelegate 的声明:
@protocol NSURLConnectionDataDelegate
可以知道 A 和 D 也正确
---
- NSURLRequest的构造函数有?(ABCD)
- +requestWithURL:
- –initWithURL:
- +requestWithURL:cachePolicy:timeoutInterval:
–initWithURL:cachePolicy:timeoutInterval:
解析:
ac-构造函数
bd-初始化函数
构造函数就是初始化函数
- iOS应用导航模式有哪些?(ABC)
- 平铺导航模式
- 标签导航模式
- 树形结构导航模式
模态视图
解析:
A:平铺模式,一般由scrollView和pageControl组合而成的展示方式。手机自带的天气比较典型。
B:标签模式,tabBar的展示方式,这个比较常见。
C:树状模式,tableView的多态展示方式,常见的9宫格、系统自带的邮箱等展现方式。
A平铺 UIPagecontroller B标签 UITabBarcontroller C 树形 UINavigationcontroller
- 使用genstring工具可以扫描的宏是有哪些?(全选)
- CFCopyLocalizedString
- CFCopyLocalizedStringFromTable
- CFCopyLocalizedStringFromTableInBundle
- CFCopyLocalizedStringWithDefaultValue
- NSLocalizedString
- NSLocalizedStringFromTable
- NSLocalizedStringFromTableInBundle
NSLocalizedStringWithDefaultValue
解析:
详细的解释可以看一下这篇博客,其实只要自己用一下genstrings并且看看那几个宏是怎么回事就理解了。
http://blog.csdn.net/abc649395594/article/details/49934117
个人:其实这道题看到有local我都会选,因为应该都是涉及到本地化。
- 在UIViewController类中与模态相关方法有哪些?(AB)
- presentViewController:animated:completion:
- dismissViewControllerAnimated:completion:
- addChildViewController:
removeFromParentViewController
解析:AB,模态:视图切换
- iOS中导航设计模式有几种?(ABC)
- 平铺导航
- 标签导航
- 树形导航
模态视图导航
解析:
A B C
我们经常会遇到在某个路径中滑出一个单屏、进行编辑、查看信息、操作界面的上的内容的情况发生。这是一种应用行为的特定形态,一般带有流程的界面变更的情况发生,比如一张页面临时取代了整个应用程序的显示屏,我们称这种处理方式为“模态视图”。默认情况下,模式视图从屏幕底部边缘滑上来切一半覆盖了当前整个屏幕,模态视图完成和程序主功能有关系的独立任务,尤其适合于主功能界面中欠缺的多级子任务。这种操作会暂时绕开应用的正常操作。
模态视图常常被用来编辑或添加内容,当你需要的时候模态视图一般从屏幕底部滑出而后遮盖先前的页面,当你完成任务后滑出的页面也会相应的缩回去,然后可以继续之前的流程。有些控件和界面元素只在次要任务中被偶尔用到,模态视图很好的把他们暂时隐藏了,并且当需要的时候出现,有效的节约了屏幕空间。
模态视图有点像是导航中的死胡同,为了能够让用户也可以同样方便的回到正常的流程中去,模态视图除了正常的操作之外一般还有加上一个“完成”按钮,或者“取消”按钮。