1 单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的通知机制。()
对
错
2 判断:从通讯录数据库查询联系人数据,可通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得。
对
错
3 NSURLConnection类的同步请求方法是?
+ sendSynchronousRequest:returningResponse:error:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
//B和C都是异步方法,需要设置delegate属性
4 genstrings命名的基本语法:genstrings [-a] [-q] [-o] sourcefile
对
错
下面是genstrings命名的基本语法:
genstrings [-a] [-q] [-o <outputDir>] sourcefile
其中参数:
-a 在存在的文件后面追加内容
-q 关闭多个键/值对的警告
-o 指定输出目录
因此如果我们想输出到en.lproj目录,则代码如下:
genstrings -o en.lproj *.m
5 树形结构导航模式是在内容是有层次的,从上到下细分或者分类包含等关系,例如黑龙江省与哈尔滨的关系,黑龙江省包含了哈尔滨,哈尔滨又包含了道里区、道外区等。
错
对
6 NSXML框架中核心的是NSXMLParser和它的委托协议NSXMLParserDelegate,NSXMLParserDelegate常用方法有哪些?
parserDidStartDocument
parser:foundCharacters
parser:didStartElement:namespaceURI:qualifiedName:attributes
parser:didEndElement:namespaceURI:qualifiedName
parserDidEndDocument
@protocol NSXMLParserDelegate <NSObject>
@optional
// Document handling methods
- (void)parserDidStartDocument:(NSXMLParser *)parser;
// sent when the parser begins parsing of the document.
- (void)parserDidEndDocument:(NSXMLParser *)parser;
// sent when the parser has completed parsing. If this is encountered, the parse was successful.
// DTD handling methods for various declarations.
- (void)parser:(NSXMLParser *)parser foundNotationDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID;
- (void)parser:(NSXMLParser *)parser foundUnparsedEntityDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID notationName:(NSString *)notationName;
- (void)parser:(NSXMLParser *)parser foundAttributeDeclarationWithName:(NSString *)attributeName forElement:(NSString *)elementName type:(NSString *)type defaultValue:(NSString *)defaultValue;
- (void)parser:(NSXMLParser *)parser foundElementDeclarationWithName:(NSString *)elementName model:(NSString *)model;
- (void)parser:(NSXMLParser *)parser foundInternalEntityDeclarationWithName:(NSString *)name value:(NSString *)value;
- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID;
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
// sent when the parser finds an element start tag.
// In the case of the cvslog tag, the following is what the delegate receives:
// elementName == cvslog, namespaceURI == http://xml.apple.com/cvslog, qualifiedName == cvslog
// In the case of the radar tag, the following is what's passed in:
// elementName == radar, namespaceURI == http://xml.apple.com/radar, qualifiedName == radar:radar
// If namespace processing >isn't< on, the xmlns:radar="http://xml.apple.com/radar" is returned as an attribute pair, the elementName is 'radar:radar' and there is no qualifiedName.
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
// sent when an end tag is encountered. The various parameters are supplied as above.
- (void)parser:(NSXMLParser *)parser didStartMappingPrefix:(NSString *)prefix toURI:(NSString *)namespaceURI;
// sent when the parser first sees a namespace attribute.
// In the case of the cvslog tag, before the didStartElement:, you'd get one of these with prefix == @"" and namespaceURI == @"http://xml.apple.com/cvslog" (i.e. the default namespace)
// In the case of the radar:radar tag, before the didStartElement: you'd get one of these with prefix == @"radar" and namespaceURI == @"http://xml.apple.com/radar"
- (void)parser:(NSXMLParser *)parser didEndMappingPrefix:(NSString *)prefix;
// sent when the namespace prefix in question goes out of scope.
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
// This returns the string of the characters encountered thus far. You may not necessarily get the longest character run. The parser reserves the right to hand these to the delegate as potentially many calls in a row to -parser:foundCharacters:
- (void)parser:(NSXMLParser *)parser foundIgnorableWhitespace:(NSString *)whitespaceString;
// The parser reports ignorable whitespace in the same way as characters it's found.
- (void)parser:(NSXMLParser *)parser foundProcessingInstructionWithTarget:(NSString *)target data:(NSString *)data;
// The parser reports a processing instruction to you using this method. In the case above, target == @"xml-stylesheet" and data == @"type='text/css' href='cvslog.css'"
- (void)parser:(NSXMLParser *)parser foundComment:(NSString *)comment;
// A comment (Text in a <!-- --> block) is reported to the delegate as a single string
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock;
// this reports a CDATA block to the delegate as an NSData.
- (NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)name systemID:(NSString *)systemID;
// this gives the delegate an opportunity to resolve an external entity itself and reply with the resulting data.
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;
// ...and this reports a fatal error to the delegate. The parser will stop parsing.
- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError;
// If validation is on, this will report a fatal validation error to the delegate. The parser will stop parsing.
@end
7 NSXMLParser构造方法有哪些?
initWithContentsOfURL
initWithData
initWithStream
initWithContentsOfFile
8 判断是否为iPad设备语句是?
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {...}
if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {...}
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {...}
9 NSAssert类似的宏有哪些?
NSAssert1
NSAssert2
NSAssert3
NSAssert4
1-5
10 Objective-C有哪几种内存管理方法?
MRR(Manual Retain Release)
MRC(Manual Reference Counting)
ARC(Automatic Reference Counting)
GC(Garbage Collection)
MRC:手动内存管理。ARC自动内存管理 GC:垃圾回收。MRR:MRC的官方名字 GC在ox中
11 AddressBook框架中常用类?
ABAddressBook
ABPerson
ABGroup
ABRecord
12 AddressBookUI框架中的视图控制器?
ABPeoplePickerNavigationController
ABPersonViewController
ABNewPersonViewController
ABUnknownPersonViewController
13 创建联系人使用的函数有哪些?
ABPersonCreate
ABRecordSetValue
ABMultiValueCreateMutable
ABAddressBookSave
14 修改联系人使用的函数有哪些?
ABPersonCreate
ABRecordSetValue
ABAddressBookGetPersonWithRecordID
ABAddressBookAddRecord
15 AddressBook高级API是在AddressBookUI框架中定义的,它为我们访问通讯录数据提供了UI界面。该框架提供了哪些视图控制器和委托协议?
ABPeoplePickerNavigationController
ABPersonViewController
ABUnknownPersonViewController
ABNewPersonViewController
16 iOS中持久化方式有哪些?
属性列表文件
对象归档
SQLite数据库
CoreData
17 NSURL的构造函数有?
+ requestWithURL:
– initWithURL:
+ URLWithString:
– initWithString:
18 表视图的相关类有哪些?
UITableView
UITableViewController
UITableViewDelegate
UITableViewDataSource
19 下面属于表视图内置的扩展视图常量如下?
UITableViewCellAccessoryNone
UITableViewCellAccessoryDisclosureIndicator
UITableViewCellAccessoryDetailDisclosureButton
UITableViewCellAccessoryCheckmark
20 下面与导航相关的视图控制器有哪些?
UIViewController
UINavigationController
UITabBarController
UITableViewController
iOS工程师能力评估
1 delegate中的property使用以下哪个属性()
assign
retain
copy
strong
assign 防止循环引用
2 关于Objective-C中属性的说明,以下错误的是()
readwrite是可读可写特性,需要生成getter方法和setter方法
readonly是只读特性,只有getter方法,没有setter方法
assign是赋值属性,setter方法将传入参数赋值给实例变量
retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象
http://www.jianshu.com/p/a2435b29875b
3 下面对category描述不正确的是()
category可以添加新的方法
category可以删除修改之前的方法
将类的实现分散到多个不同文件或多个不同框架中
创建对私有方法的前向引用
无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的 class 添加方法,包括那些没有源代码的类(如某些框架类),但 不能删除修改之前的方法。
类别主要有3个作用:
将类的实现分散 到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。
创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
(3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。
4 NSRunLoop的以下描述错误的是()
Runloop并不是由系统自动控制的
有3类对象可以被run loop监控:sources,timers,observers
线程是默认启动run loop的
NSTimer可手动添加到新建的NSRunLoop中
5 单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的通知机制。()
对
错
6 判断:从通讯录数据库查询联系人数据,可通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得。
对
错
7 NSURLConnection类的同步请求方法是?
+ sendSynchronousRequest:returningResponse:error:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
8 genstrings命名的基本语法:genstrings [-a] [-q] [-o] sourcefile
对
错
9 下面哪些属于UITableViewDelegate协议的方法?
tableView:cellForRowAtIndexPath:
tableView:numberOfRowsInSection:
tableView:didSelectRowAtIndexPath:
numberOfSectionsInTableView:
10 平铺导航模式是在内容组织上没有层次关系,展示的内容都放置在一个主屏幕上,采用分屏或分页控制器进行导航,可以左右或者上下滑动屏幕查看内容。
对
错
11 UIPopoverController控制器的常用方法和属性?
presentPopoverFromBarButtonItem:permittedArrowDirections:animated:呈现Popover视图方法
dismissPopoverAnimated: 关闭Popover视图方法
popoverVisible,判断Popover视图是否可见
popoverArrowDirection,判断Popover视图箭头的方向
12 模态视图专用属性有哪些?
UIModalPresentationFullScreen,全屏状态,是默认呈现样式,iPhone只能全屏呈现。
UIModalPresentationPageSheet,它的宽度是固定的768点,在iPad竖屏情况下则全屏呈现。
UIModalPresentationFormSheet,它的是固定的540x620点,无论是横屏还是竖屏情况下呈现尺寸都不会变化。
UIModalPresentationCurrentContext,它与父视图控制器有相同的呈现方式。
13 iOS单元测试框架有哪些?
OCUnit
GHUnit
OCMock
NSXML
OCUnit
和XCTest都是官方的测试框架,OCUnit已经过时被XCTest所取代。
GHUnit和OCMock都是第三方的测试框架
14 NSURLConnectionDelegate协议中的方法有哪些?
connection:didReceiveData:
connection:didFailWithError:
initWithRequest:delegate:
connectionDidFinishLoading:
15 NSURLRequest的构造函数有?
+ requestWithURL:
– initWithURL:
+ requestWithURL:cachePolicy:timeoutInterval:
– initWithURL:cachePolicy:timeoutInterval:
16 iOS应用导航模式有哪些?
平铺导航模式
标签导航模式
树形结构导航模式
模态视图
17 使用genstring工具可以扫描的宏是有哪些?
CFCopyLocalizedString
CFCopyLocalizedStringFromTable
CFCopyLocalizedStringFromTableInBundle
CFCopyLocalizedStringWithDefaultValue
NSLocalizedString
NSLocalizedStringFromTable
NSLocalizedStringFromTableInBundle
NSLocalizedStringWithDefaultValue
18 表视图的数据源协议与委托协议有哪些?
UITableView
UITableViewController
UITableViewDelegate
UITableViewDataSource
19 在UIViewController类中与模态相关方法有哪些?
presentViewController:animated:completion:
dismissViewControllerAnimated:completion:
addChildViewController:
removeFromParentViewController
20 iOS中导航设计模式有几种?
平铺导航
标签导航
树形导航
模态视图导航
搜狗2015 iOS工程师笔试题
1 以下哪一段代码不会抛出异常()
NSArray *array=@[1,2,3];NSNumber * number=array[3];
NSDictionary *dict=@{@"key":nil};
NSString *str=nil;NSString *str2=[str substringFromIndex:3];
NSString *str=@"hi";NSString *str2=[str substringFromIndex:3];
A:OC数组中的元素不能是基本数据类型,必须是对象,并且array[3]下标越界,Xcode编译时报错
B:字典中键值对不能为nil,运行时崩溃
C:OC中向空对象发送消息,不执行任何操作,不报错,不崩溃
D:数组下标越界,运行时崩溃
2 delegate中的property使用以下哪个属性()
assign
retain
copy
strong
A防止循环引用
BD 可能会导致循环引用
3 C和Objective-C的混合使用,以下描述错误的是()
cpp文件只能使用C/C++代码
cpp文件include的头文件中,可以出现objective-C的代码
mm文件中混用cpp直接使用即可
cpp使用objective-C的关键是使用接口,而不能直接使用代码
obj-c
的编译器处理后缀为
m
的文件时,可以识别
obj-c
和
c
的代码,处理
mm
文件可以识别
obj-c,c,c++
代码
4 关于Objective-C中属性的说明,以下错误的是()
readwrite是可读可写特性,需要生成getter方法和setter方法
readonly是只读特性,只有getter方法,没有setter方法
assign是赋值属性,setter方法将传入参数赋值给实例变量
retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象
5 下面关于线程管理错误的是()
GCD在后端管理着一个线程池
NSOperationQueue是对NSthread的更高层的封装
NSThread需要自己管理线程的生命周期
GCD可以根据不同优先级分配线程
B是错的,NSOperationQueue是对GCD的更高层的封装
6 在没有navigationController的情况下,要从一个ViweController切换到另一个ViewController应该()
{self navigationController pushViewController:nextViewController animated:YES};
{self view addSubview:nextViewController.view};
{self presentModalViewController:nextViewController animated:YES};
{self pushViewController:nextViewController animated:YES};
A是navigationController包裹下的控制器才使用的跳转,不符合题意
B是加载一个控制器的view,也是错的
C是IOS中的模态切换,符合题意,所以C是正确答案
D明显就是错误的
7 下面对category描述不正确的是()
category可以添加新的方法
category可以删除修改之前的方法
将类的实现分散到多个不同文件或多个不同框架中
创建对私有方法的前向引用
8 iOS中的数据持久化方式()
属性列表
对象归档
SQLite和CoreData
以上全部
9 NSRunLoop的以下描述错误的是()
Runloop并不是由系统自动控制的
有3类对象可以被run loop监控:sources,timers,observers
线程是默认启动run loop的
NSTimer可手动添加到新建的NSRunLoop中