Objective-C测试题

来源:互联网 发布:深入理解nginx 百度云 编辑:程序博客网 时间:2024/06/05 23:49

Objective-C测试题(共80题)

1、OC中布尔(BOOL)类型的变量的值只有:A、1/0B、YES/NOC、true/falseD、1/-12、关于KVC的描述正确的是:A、KVC是指"Key-Value Observing"B、是一种间接访问对象的属性的机制。C、只能访问对象的属性。D、当对象的属性值改变时,我们能收到一个通知。3、NSDateFormatter * formatter = [[NSDateFormatter alloc] init];[formatter setAMSymbol:@"AM"];[formatter setPMSymbol:@"PM"];[formatter setDateFormat:@"YY-MM-dd hh:mm:ss aaa"];NSString * currentDate = [formatter stringFromDate:[NSDate date]];NSLog(@"%@",currentDate);打印结果是:A、2012-05-31 17:45:04 PMB、12-05-31 17:45:04C、2012-05-31 17:45:04D、12-05-31 05:45:04 PM4、用哪个关键字定义协议中必须实现的方法:A、@optionalB、@protectedC、@privateD、不用写关键字5、现有如下集合,能准确删除“张三”的代码是:NSMutableDictionary * peoples=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"张三",@"左护法",@"李四",@"右使",@"唐sir",@"老大哥", nil];A、[peoples removeObjectForKey:@"左护法"];B、[peoples removeObject:@"张三"];C、[peoples removeObjectAtIndex:0];D、[peoples removeAllObjects];6、声明一个方法:提供Student对象数组按照学号升序排列的判断条件:A、-(NSComparisonResult)compareWithNumberForAscendSort:(Student*)otherStudentB、-(NSInteger)compareWithNumberForAscendSort:(Student*)otherStudentC、- (BOOL))compareWithNumberForAscendSort:(Student*)otherStudentD、+(int)compareWithNumberForAscendSort:(Student7、关于类目、延展的描述错误的是:A、延展主要为类提供“私有”方法B、类目、延展不但能为类添加方法,而且都可以添加新的实例变量C、无论能否拿到类的源码,类目都可以对其扩展D、类目和延展声明语法不同8、向Xcode控制台输出一个字符串应该用:A、NSLog()B、Printf()C、NSPrintf()D、scanf()9、类何时调用dealloc方法:A、[property release]后B、[instance release]后C、[super dealloc]时D、当引用计数为0时.10、写出下面程序段的输出结果:NSString * aString = [[NSString alloc] initWithString:@"123"];[aString autorelease];NSMutableArray * arr = [NSMutableArray array];[arr addObject:aString];NSLog(@"string = %lu",[aString retainCount]);A、1B、0C、整型最大值D、211、在OC中,类的定义包括两部分(声明与实现),其中实现部分是:A、@importB、@interfaceC、@implementationD、@protocol12、下面程序段的输出结果是什么:NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil];[dic setObject:@"1" forKey:@"3"];[dic removeObjectForKey:@"1"];NSLog(@"%@",dic);A、1=3 2=3 3=4B、1=2 1=3 3=4C、2=1 3=1 4=3D、3=1 3=2 4=313、以下代码执行后,person对象的retain count是多少:Person * person = [[Person alloc] init];[person retain]; [person release];A、0B、1C、2D、314、协议与委托的描述不正确的是:A、委托是iOS的一种设计模式B、协议里的方法默认是必须实现的C、类接受了多个协议,这些协议写在父类后面的<>内,多个协议之间用“、”隔开D、定义协议使用@protocol关键字15、下列有效的键路径是:A、[foo valueForKeyPath:@”1SomeMember”]B、[foo valueForKeyPath:@”someMember.someAttribute”]C、[foo valueForKeyPath:@”SOMEMEMBER@someAttibute”]D、[foo valueForKeyPath:@”some Member”]16、下面程序段的输出结果是什么:NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil];[dic removeObjectForKey:@"3"];NSLog(@"%@",dic);A、1=2 3=4B、1=2 2=3C、2=1 4=3D、2=1 3=217、下面关于类概念的描述中,错误的是:A、类是抽象数据类型的实现B、类是具有共同行为的若干对象的统一描述体C、类是创建对象的模板D、类就是C语言中的结构体类型18、创建对象时,对象的内存和指向对象的指针分别分配在哪里:A、堆区,栈区B、常量区,堆区C、全局区,栈区D、栈区,堆区19、NSArray *array = [NSArray arrayWithObjects:@"one", @"two", @"three",nil];NSLog(@"%@",[array objectAtIndex:1]);NSLog(@"%@",[array objectAtIndex:3]);控制台中打印的最后一条信息会是:A、oneB、twoC、threeD、崩溃信息20、OC中与alloc相反的方法是:A、releaseB、retainC、deallocD、free21、必须实现的协议方法使用:关键字声明.A、@propertyB、@interfaceC、@requiredD、@protocol22、关于类和对象的概念,下列属于对象的是:A、奥迪A6B、保龄球C、世界冠军刘翔D、西红柿23、在OC中,类中成员变量的可见度(访问权限)不包括:A、@publicB、@protectedC、@privateD、@optional24、经过下列哪种操作后需要使用release方法。A、delegateB、assignC、retainD、dealloc25、使用 Objective-C 语言输出“This is a Objective-C program.”正确的是:A、NSLog(@"%s",This is a Objective-C program.);B、NSLog(@"%@",This is a Objective-C program.);C、NSLog(@"This is a Objective-C program.",%@);D、NSLog(@"This is a Objective-C program.");26、Objective-C中包含一个自定义的头文件应该使用:A、#include ""B、#include<>C、#import ""D、#import<>27、下面哪些选项是属性的正确声明方式:A、@property(nonatomic,retain)NSString myString;B、@property(nonatomic,assign)NSString * myString;C、@property(nonatomic,assign)int mynumber;D、@property(nonatomic,retain)int mynumber;28、不会立刻使引用计数器改变的是:A、releaseB、allocC、autoreleaseD、retain29、下面哪个选项对集合的描述是正确的:A、集合内不能存不同类型的对象B、集合内可以存整型的数C、字典内键值可以相同,但是每个键值对应的对象必须不同D、集合内只能存对象30、下列说法中错误的是:A、Objective-C不用"函数调用",而用互相传递讯息.B、Objective-C一个完整的类分为interface和implementation两块C、Objective-C对象使用new分配内存,用delete释放D、Objective-C协议分为非正式协议和正式协议31、@interface Person : NSObject@property(nonatomic,retain)NSString * name;@end上面声明一个Person类Person * per = [[Person alloc] init];per.name = [[NSString alloc] initWithFormat:@"张三"];NSLog(@"per.name = %d",[per.name retainCount]);A、per.name = -1;B、per.name = 0;C、per.name = 1;D、per.name = 2;32、读代码:NSString *str=@"hello";NSMutableSet *mt=[NSMutableSet setWithObjects:str, nil];[mt addObject:str];NSLog(@"%lu",mt.count);结果是:A、1B、2C、3D、433、下面程序段的输出结果是什么:NSArray * arr1 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];NSString *str;str = [arr1 objectAtIndex:2];NSLog(@"%@",str);A、1B、2C、3D、程序崩溃34、有一个类Student,要求实现:定义一个实例初始化方法,初始化方法需要传入名字和性别:A、-(id)initWithName:(NSString *)name sex:(NSString *)sex{  if (self){    self.name = name;    self.sex = sex;  }  return self;}B、-(id)initWithName:(NSString *)name sex:(NSString *)sex{  if (self = [super init]) {    self.name = name;    self.sex = sex;  }  return self;}C、-(id)initWithName:(NSString *)name sex:(NSString *)sex{  if (!self) {    self.name = name;    self.sex = sex;  }  return self;}D、-(id)initWithName:(NSString *)name sex:(NSString *)sex{  if (self = [super init]) {    self.name = name;    self.sex = sex;  }}35、下面描述正确的选项是:A、当计数器为1时,dealloc方法由系统自动调用B、一个对象在引用计数变为0时,会调用自己的dealloc方法C、在dealloc方法里,应该在[super dealloc]后释放本类所拥有的对象D、开启ARC后,可以重载dealloc,必须在dealloc里写 [super dealloc]方法36、下面程序段的输出结果是什么:NSMutableArray * arr1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil];[arr1 addObject:@"0"];[arr1 replaceObjectAtIndex:2 withObject:@"3"];NSLog(@"%@",arr1);A、0,1,2,3B、1,2,3,0C、1,3,3,0D、0,3,2,337、现有自定义类Student,下列选项中Student类的便利构造器编写正确的是:A、-(id) initWithName:(NSString *) newName{  Student * stu = [[Student alloc] init];  stu.Name = newName;  return stu;}B、+(id) studentWithName:(NSString *) newName{  Student * stu = [[Student alloc] init];  stu.Name = newName;  return stu;}C、+(id) studentWithName:(NSString *) newName{  Student * stu = [[Student alloc] init];  stu.Name = newName;  [stu release];  return stu;}D、+(id) studentWithName:(NSString *) newName{  Student * stu = [[Student alloc] init];  stu.Name = newName;  [stu autorelease];  return stu;}38、现要求声明一个集合,并将字符串添加到集合中,编写了如下代码,其中错误的是第几行:NSString * aString = [[NSString alloc] initWithString:@"iLanou"]; (1)[aString autorelease]; (2)NSArray * arr = [NSArray array]; (3)[arr addObject:aString]; (4)NSLog(@"string = %lu",[aString retainCount]);A、(1)B、(2)C、(3)D、(4)39、自定义一个Person类,下面哪个选项是规范的便利构造器声明方式:A、-(id)personWithName:(NSString *)theName;B、-(id)personwithName:(NSString *)theName;C、+(id)personwithName:(NSString *)theName;D、+(id)personWithName:(NSString *)theName;40、NSRange是什么数据类型:A、数组B、字典C、结构体D、指针41、关于类目的说法正确的有:A、类目可以为所有的类添加新方法。B、类目中添加的方法比原类中定义的方法级别要低。C、定义类目需要使用关键字category。D、类目可以随意使用。42、简单类型的成员比如:int类型成员在使用@property()时,括号中应使用:A、assignB、copyC、retainD、auto43、NSMutableString * str = [[NSMutableString alloc] initWithFormat:@"123"];NSLog(@"str = %p",str);[str appendFormat:@"456"];NSLog(@"str = %p",str);上面代码对字符串str进行拼接后,2次打印的地址是否相同:A、相同B、不同C、随机打印D、有时相同,有时不同44、下列哪个选项不需要release方法:A、[[NSString alloc]init];B、[[NSString alloc] initWithString:@”hehe”];C、[[NSArray arrayWithArray: arr1];D、[[NSMutableDictionary alloc] init];45、Objective-C 语言中类的实例变量如果只可以被本类和其子类访问,需要下列哪个修饰符:A、@publicB、@privateC、@protectedD、@friendly46、声明一个返回值为NSArray,并且带两个字符串对象的BLOCK类型变量:A、NSArray (*aBlock)(NSString * str,NSString *str2)B、NSArray ^(*aBlock)(NSString * str,NSString *str2)C、NSArray (^aBlock)(NSString * str,NSString *str2)D、NSArray *(^aBlock)(NSString * str,NSString *str2)47、NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a value" forKey:@"aKey"];NSLog(@"%@",[dict objectForKey:@"aKey"]);[dict release];控制台中打印的最后一条信息会是:A、a valueB、aKey : a valueC、崩溃信息D、a value : aKey48、NSRange的成员变量有:A、location,lengthB、width,heightC、location,heightD、length,width49、以下对类的描述不正确的是:A、类的接口部分可以包含实例变量、属性和方法B、可以把声明和实现都放到.h文件中C、一对文件(Person.h Person.m)只能定义一个类D、类比较抽象,对象比较具体50、内存管理的关键字描述错误的是:A、retaincount是指对象的引用计数。B、retain关键字可以增大对象的引用计数。C、release可以减小对象的引用计数,但autorelease不可以D、dealloc方法不能直接调用51、下列代码:@property(nonatomic,assign)id<Painting>myObject;A、是说myObject是Painting分类的一部分B、是说myObject遵从于Painting分类C、是说myObject遵从于Painting协议D、不是合法的Objective-C语法格式52、以下说法正确的是:A、求数组的内容的个数用length方法B、字典是根据其位置来索引数据的C、协议中定义的方法默认是必须实现的D、定义类目必须要拿到自己类的源代码53、读代码NSString * str =[[NSString alloc]initWithFormat:@"%@",@"iLanou123ios"];NSString * str1=[str substringToIndex:3];NSString * str2=[str substringWithRange:NSMakeRange(6, 3)];NSString * newStr=[str1 stringByAppendingString:str2];NSLog(@"newStr=%@",newStr);则newStr的值为:A、iLanouB、iL123C、iLaiosD、iLa12354、NSString *name = [[NSString alloc]initWithString:@"张三"];NSLog(@"%d",[name retainCount]);上述代码打印结果是:A、-1B、0C、1D、255、Objective-C的代码文件的后缀为:A、.cppB、.mC、.plD、.c56、关于NSSet描述正确的有:A、NSSet可以存放任何数据类型的数据。B、NSSet存放数据是无序的。C、NSSet可以通过下标获取数据。D、NSSet存放的数据是有序的。57、下列哪个选项与@synthesize配合使用:A、@endB、@interfaceC、@implementationD、@property58、对于Objective-C中的方括号“[]”的作用,下列说法错误的是:A、用于通知某个对象该做什么B、方括号内第一项是对象,其余部分是你需要对象执行的操作C、在Objective-C中通知对象执行某种操作,称为发送消息.(也叫调用方法)D、方括号中可以为空59、下列代码正确的输出结果是:NSString * urlStr = @"www.lanou3g.com";NSRange range = NSMakeRange(4,7);NSString *prefix = [urlStr substringWithRange:range];NSLog(@"%@",prefix);A、lanB、lanou3gC、www.lanD、ou3g60、面向对象的特性不包括:A、封装B、继承C、多态D、构造61、NSString 和 NSMutableString的关系和区别描述不正确的是:A、NSString是不可变字符串,即本身内容不能被改变。B、NSMutableString是可变字符串,即本身内容可修改。C、NSMutableString是NSString的子类。D、NSString和NSMutableString没有任何关系。62、关于KVC的描述正确的是:A、KVC是指“键-值-编码”。B、是一种直接访问对象的属性的机制。C、只能访问对象的属性。D、当对象的属性值改变时,我们能收到一个通知。63、下面哪些选项是类:A、导演B、张艺谋C、擎天柱D、辉哥的雪铁龙64、下面哪个选项无内存问题的:A、-(NSString *)description{  NSString * str = [[NSString alloc] initWithFormat:@"description"];  return str;}B、-(NSString *)description{  NSString * str = [[NSString alloc] initWithFormat:@"description"];  [str release];  return str;}C、-(NSString *)description{  NSString * str = [[NSString alloc] initWithFormat:@"description"];  [str autorelease];  return str;}D、-(NSString *)description{  NSString * str = [NSString stringWithFormat:@"description"];  return [str autorelease];}65、关于协议描述不正确的是:A、协议分正式和非正式协议。B、在要求确认协议的类必须实现协议中的方法时,可以使用@required。C、一个协议可以被多个类确认。D、协议中声明的方法,默认是@optional的。66、名为print::的方法有几个传入参数:A、0B、1C、2D、367、有如下一个类定义@interface MyClass:NSObject@property(nonatomic,retain)NSString *str;@end@implementation MyClass(1)-(NSString *)str{  return str;}-(void)dealloc{  self.str = nil;  [super dealloc];}@endA、-(void)setStr:(NSString *)newStr{  str = newStr;}B、-(void)setStr:(NSString *)newStr{  [str release];  str = [newStr retain];}C、-(void)setStr:(NSString *)newStr{  if(str != newStr)  {    [str release];    str = [newStr retain];  }}D、-(void)setStr:(NSString *)newStr{  [newStr retain]  [str release] = newStr;}68、查看下列代码,能正确输出number的选项是:  @interface MyClass : NSObject{  int number;}+(void) printNumber;@end@implementation MyClass+(void) printNumber{  number =10;  NSLog(@""%d"",number);}@endA、[MyClass printNumber];B、MyClass * obj = [[MyClass alloc] init]; [obj printNumber];C、printNumber();D、编译错误,无法执行。69、关于内存管理的描述错误的是:A、alloc与dealloc是对应的,前者分配内存,后者回收内存B、retain与release是对应的,前者retainCount加1,后者retainCount减1C、当对象的retainCount为0时,dealloc会被系统调用D、iOS5之后的ARC指的是系统垃圾回收70、OC中的委托最好声明成:A、retainB、assignC、copyD、readonly71、下列选项中不能正常为emp的name属性赋值的代码有:A、emp.name=@"李嘉诚";B、emp->name=@"李开复";C、[emp setValue:@"柳传志" forKey:@"name"];D、[emp setName:@"黄光裕"];72、NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil];NSArray *arr = [[NSArray alloc] initWithArray:[dic allKeys]];NSString *str = [[NSString alloc] initWithFormat:[arr objectAtIndex:0],[arr objectAtIndex:1],[arr objectAtIndex:2]];NSLog(@"%@",str);结果是:A、123B、234C、2D、373、下列哪个操作不会引起引用计数(retaincount)的变化是:A、NSString *str1 = [[NSString stringWithFormat:@"hehe"];B、int a=1;C、NSMutableData *data1 = [NSMutableData allocWithZone:data2];D、NSArray *arr1 = [[NSArray alloc]initWithArray:arr2];74、NSMutableDictionary字典中删除对象可以使用下面那个方法:A、filteredArrayUsingPredicate:B、arrayByAddingObject:C、initWithCapacity:D、setValue:forKey:75、对于下面代码说法正确的是:@property (copy,nonatomic,readonly)NSString * calValue;A、没有getter方法,当对calvalue赋值时,将产生一个NSString副本。B、此属性可保证多线程安全。C、此属性在合成时可以生成设置器方法。D、此属性只能读取,不能赋值。76、下面程序段的输出结果是什么:NSString * aString = [[NSString alloc] initWithFormat:@"123"];NSLog(@"%d",aString.retainCount);aString = @"456";NSLog(@"%d",aString.retainCount);[aString release];aString = @"789";NSLog(@"%d",aString.retainCount);A、1,2,1B、1,1,0C、1,-1,0D、1,-1,-177、实例变量默认的访问修饰符是:A、@publicB、@privateC、@protectedD、@package78、下面程序段的输出结果是什么:NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"1",@"3",@"1",@"4", nil];NSArray *arr1 = [[NSArray alloc] initWithArray:[dic allKeys]];NSArray *arr2 = [[NSArray alloc] initWithArray:[dic allValues]];NSMutableDictionary *dic2 = [[NSMutableDictionary alloc] initWithObjects:arr1 forKeys:arr2];NSLog(@"%@",dic2);A、1=2 1=3 1=4B、2=1 3=1 4=1C、1=4D、4=179、将@”2B青年”替换成@”文艺青年”的代码是:A、[@”2B青年” stringByAppendingOfString:@”2B” withString:@”文艺”];B、NSRange range = {0,2}; [@”2B青年” stringByReplacingCharactersInRange:range withString:@”文艺”];C、NSRange range = {1,2};[@”2B青年” stringByReplacingCharactersInRange:range withString:@”文艺”];D、[@”2B青年” stringByReplacingOccurrencesOfString:@”文艺” withString:@”2B”];80、NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];NSString *str = [NSString stringWithFormat:@”abc”];NSString *str2 = [str retain];[pool release];NSLog(@”str retainCount = %d,str2 retainCount = %d”,[str retainCount],[str2 retainCount]);上述代码打印结果正确的是:A、str retainCount = 2,str2 retainCount = 2B、str retainCount = 0,str2 retainCount = 1C、str retainCount = 1,str2 retainCount = 1D、str retainCount = 2,str2 retainCount = 0

※ 判断题(共10题,每题2分)

1、在dealloc方法中对变量的释放顺序与初始化的顺序相同。正确错误2、当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。正确错误3、在静态(类)方法中,self就是指当前的类名。正确错误4、方法需要传递多个参数时,参数以逗号分隔。正确错误5、OC中如果向空指针nil发送消息,程序会崩溃的。正确错误6、协议中定义的方法默认是必须实现的。正确错误7、注释可以出现在程序的任何位置。正确错误8、便利构造器产生的对象应当由使用者进行销毁。正确错误9、实例对象都是通过调用类方法生成的。正确错误10、为了保证程序不产生额外的内存开销,当对象不再被需要以后,应当被立即销毁。正确错误
0 0
原创粉丝点击