Objective--C笔试题解析

整理出的一些简单实用的OC笔试题,如有错误之处希望大家及时提出,以便修改,不误人子弟.
1、
不会立刻使引用计数器改变的是:
答案:(C)
A、release //立即引用计数-1
B、alloc//引用计数+1
C、autorelease //出了释放池之后才会起作用
D、retain//引用计数+1


2、
在OC中类的接口声明关键字为:
答案:(B)
A、@import // 引入头文件
B、@interface // 接口声明
C、@implemention//实现部分声明
D、@protocol//协议


3、
NSString *name = [[NSString alloc]initWithString:@"张三"]; NSLog(@"%d",[name retainCount]);
上述代码打印结果是:
答案:(A)
A、-1
B、0
C、1
D、2
//如果输出时用的是%d,则使用initWithString不管@""中的内容是什么,retainCount都是-1.
如果输出时是%lu,则retainCount为整型最大数 .
//如果使用的是initWithFormat,@""里边为中文,则retainCount为1,如果@""里边是其他,则retainCount为-1 .
//如果使用的是stringWithFormat,内部会自动调用便利构造器中的alloc,打印结果跟编译器有关,有的编译器打印出的结果不准确,但是原理还是不变.


4、
下列选项中全部属于对象的是:
答案:(C)
A、我的白色iPhone4s;Mac Mini
B、狗;老虎
C、邻居家的猫咪“贝贝”;我的弟弟“张三”
D、保时捷;犀利哥
//宽泛指向的一定程度上还可以是一个类,因此,只有具体指向某一个对象的时候才能说它是一个对象


5、
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a value" forKey:@"aKey"]; NSLog(@"%@",[dict objectForKey:@"aKey"]); [dict release];
控制台中打印的最后一条信息会是:
答案:(C)
A、a value
B、aKey : a value
C、崩溃信息
D、a value : aKey
// 该程序前两句没有问题,最后一句由于并没有使用alloc开辟,因此不必使用release自行释放.


6、
现有如下集合,能准确删除“张三”的代码是:NSMutableDictionary * peoples=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"张三",@"左护法",@"李四",@"右使",@"唐sir",@"老大哥", nil];
答案:(A)
A、[peoples removeObjectForKey:@"左护法"];
B、[peoples removeObject:@"张三"];
C、[peoples removeObjectAtIndex:0];
D、[peoples removeAllObjects];


7、
关于类和对象的概念,下列属于对象的是:
答案:(C)
A、奥迪A6
B、保龄球
C、世界冠军刘翔
D、西红柿


8、
以下说法不正确的是:
答案:(A)
A、nonatomic:提供多线程保护,提高性能,在没有使用多线程的编程中可以选择使用。
B、assign:属性默认值。说明设置器直接进行赋值,针对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等等。
C、retain:此属性只用于obj-c的对象类型,对参数进行release旧值,再retain新值。
D、copy:此属性只对实现NSCopying协议的对象有效(NSString)。拷贝工作由copy方法执行。
// (A) nonatomic并不提供多线程保护,atomic才提供


9、
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"2", nil]; NSMutableSet *set = [[NSMutableSet alloc]init]; for(NSString *str in array) { [set addObject:str]; } NSLog(@"%lu",[set count]); [set release];
控制台打印的结果是:
答案:(A)
A、4 //set中不能存放重复的对象
B、5
C、6
D、7


10、
经过下列哪种操作后需要使用release方法。
答案:(C)
A、delegate
B、assign
C、retain//与release对应
D、dealloc // 与alloc对应


11、
声明一个方法:提供Student对象数组按照学号升序排列的判断条件:
答案:(A)
A、-(NSComparisonResult)compareWithNumberForAscendSort:(Student*)otherStudent B、-(NSInteger)compareWithNumberForAscendSort:(Student*)otherStudent C、- (BOOL))compareWithNumberForAscendSort:(Student*)otherStudent D、+(int)compareWithNumberForAscendSort:(Student*)otherStudent


12、
下列哪个选项不需要release方法:
答案:(C)
A、[[NSString alloc]init];
B、[[NSString alloc] initWithString:@”hehe”];
C、[[NSArray arrayWithArray: arr1];
D、[[NSMutableDictionary alloc] init];
// 谁污染谁治理原则,只要开辟空间就需要释放


13、
OC中,所有类的根类是:
答案:(A)
A、NSObject
B、NSDate
C、NSCoding
D、UIView


14、
下列哪个选项与@synthesize配合使用:
答案:(D)
A、@end
B、@interface
C、@implementation
D、@property //在较早的编译器中,需要使用@synthesize来让编译器自动生成属性所对应的实例变量的setter\getter方法的实现部分 (现在的编译器只需要声明属性@property就可以了)


15、
向Xcode控制台输出一个字符串应该用:
答案:(A)
A、NSLog()
B、Printf()
C、NSPrintf()
D、scanf()


16、
必须实现的协议方法使用:关键字声明.
答案:(C)
A、@property
B、@interface
C、@required // 如果不写,系统默认的就是required
D、@protocol


17、
NSMutableString * str = [[NSMutableString alloc] initWithFormat:@"123"]; NSLog(@"str = %p",str); [str appendFormat:@"456"]; NSLog(@"str = %p",str);
上面代码对字符串str进行拼接后,2次打印的地址是否相同:
答案:(A)
A、相同 // 可变字符串的操作是在原字符串的基础上操作的,不生成新的字符串,因此拼接是在原字符串后直接拼接,地址不变.
B、不同
C、随机打印
D、有时相同,有时不同


18、
Objective-C的代码文件的后缀为:
答案:(B)
A、.cpp //c++
B、.m // OC
C、.pl //Perl语言程序的后缀
D、.c //c语言


19、
下列说法中错误的是:
答案:(C)
A、Objective-C不用"函数调用",而用互相传递讯息.
B、Objective-C一个完整的类分为interface和implementation两块
C、Objective-C对象使用new分配内存,用delete释放 // 使用alloc分配和dealloc释放
D、Objective-C协议分为非正式协议和正式协议


20、
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", @"three",nil]; NSLog(@"%@",[array objectAtIndex:1]); NSLog(@"%@",[array objectAtIndex:3]);
控制台中打印的最后一条信息会是:
答案:(D)
A、one
B、two
C、three
D、崩溃信息 // 最后一句数组越界了(只有三个对象)


21、
OC中布尔(BOOL)类型的变量的值只有:
答案:(B)
A、1/0
B、YES/NO
C、true/false
D、1/-1


22、
Objective-C中包含一个自定义的头文件应该使用:
答案:(C)
A、#include "" // c中的自定义
B、#include<> // c中系统类库
C、#import "" // OC自定义类
D、#import<>//OC系统类库


23、
在OC中,类中成员变量的可见度(访问权限)不包括:
答案:(D)
A、@public
B、@protected
C、@private
D、@optional //协议中用于可选方法


24、
OC中的委托最好声明成:
答案:(B)
A、retain
B、assign
C、copy
D、readonly


25、
面向对象的特性不包括:
答案:(D)
A、封装
B、继承
C、多态
D、构造


26、
OC中与alloc相反的方法是:
答案:(C)
A、release
B、retain
C、dealloc
D、free


27、
用哪个关键字定义协议中必须实现的方法:
答案:(D)
A、@optional
B、@protected
C、@private
D、不用写关键字 // 默认就是required


28、
下面哪些选项是属性的正确声明方式:
答案:(C)
A、@property(nonatomic,retain)NSString myString; // NSString * B、@property(nonatomic,assign)NSString * myString;//assign用于修饰基本数据类型 C、@property(nonatomic,assign)int mynumber; D、@property(nonatomic,retain)int mynumber;// int型用assign修饰


29、
对于Objective-C中的方括号“[]”的作用,下列说法错误的是:
答案:(D)
A、用于通知某个对象该做什么
B、方括号内第一项是对象,其余部分是你需要对象执行的操作
C、在Objective-C中通知对象执行某种操作,称为发送消息.(也叫调用方法)
D、方括号中可以为空 //不能为空


30、
以下代码执行后,person对象的retain count是多少:
Person * person = [[Person alloc] init];//alloc后引用计数+1 [person retain]; //retain后再+1 [person release];//release后-1
答案:(B)
A、0
B、1
C、2
D、3


31、
创建对象时,对象的内存和指向对象的指针分别分配在哪里:
答案:(A)
A、堆区,栈区 // 程序员能操作的只有堆内存,因此开辟空间只能在堆中
B、常量区,堆区
C、全局区,栈区
D、栈区,堆区


32、
协议与委托的描述不正确的是:
答案:(C)
A、委托是iOS的一种设计模式
B、协议里的方法默认是必须实现的
C、类接受了多个协议,这些协议写在父类后面的<>内,多个协议之间用“、”隔开//多协议的话应该在<>中用","隔开
D、定义协议使用@protocol关键字


33、
类何时调用dealloc方法:
答案:(D)
A、[property release]后
B、[instance release]后
C、[super dealloc]时
D、当引用计数为0时.


34、
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);
打印结果是:
答案:(D)
A、2012-05-31 17:45:04 PM
B、12-05-31 17:45:04
C、2012-05-31 17:45:04
D、12-05-31 05:45:04 PM


35、
NSRange的成员变量有:
答案:(A)
A、location,length //位置和长度信息,表示从下标为location开始,往后数length个长度
B、width,height
C、location,height
D、length,width


36、
现有自定义类Student,下列选项中Student类的便利构造器编写正确的是:
答案:(D)
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;}//release会立即-1 D、+(id) studentWithName:(NSString *) newName{ Student * stu = [[Student alloc] init]; stu.Name= newName; [stu autorelease]; return stu;}


37、
自定义一个Person类,下面哪个选项是规范的便利构造器声明方式:
答案:(D)
A、-(id)personWithName:(NSString *)theName;//排除A和B,因为是+号方法 B、-(id)personwithName:(NSString *)theName; C、+(id)personwithName:(NSString *)theName;//驼峰法命名,with要大写 D、+(id)personWithName:(NSString *)theName;


38、
下列代码正确的输出结果是:
NSString * urlStr = @" www.jianshu.com"; NSRange range = NSMakeRange(4,7); NSString *prefix = [urlStr substringWithRange:range]; NSLog(@"%@",prefix);
答案:(B)
A、.ji
B、jianshu
C、www.jia
D、jian


39、
在OC中扩展类的方法的形式不包括:
答案:(B)
A、继承
B、多态
C、类目//不能添加实例变量
D、延展//为对象添加私有实例变量和方法


40、
关于KVC的描述正确的是:
答案:(B)
A、KVC是指"Key-Value Observing"//键值编码Key-Value-Coding
B、是一种间接访问对象的属性的机制。
C、只能访问对象的属性。//也可以修改
D、当对象的属性值改变时,我们能收到一个通知。


41、
以下说法正确的是:
答案:(C)
A、求数组的内容的个数用length方法//用count,length是求字符串长度的方法
B、字典是根据其位置来索引数据的//字典中的存储是无序的
C、协议中定义的方法默认是必须实现的
D、定义类目必须要拿到自己类的源代码//不用拿到源代码,只需在建立Category文件时指明为哪个类添加方法即可


42、
简单类型的成员比如:int类型成员在使用@property()时,括号中应使用:
答案:(A)
A、assign
B、copy
C、retain
D、auto


43、
下列代码:@property(nonatomic,assign)id<Painting>myObject;
答案:(C)
A、是说myObject是Painting分类的一部分
B、是说myObject遵从于Painting分类
C、是说myObject遵从于Painting协议//协议代理对象
D、不是合法的Objective-C语法格式


44、
内存管理的关键字描述错误的是:
答案:(C)
A、retaincount是指对象的引用计数。
B、retain关键字可以增大对象的引用计数。
C、release可以减小对象的引用计数,但autorelease不可以 //autorelease也可以,只是在出了自动释放池后才-1
D、dealloc方法不能直接调用


45、
下面程序段的输出结果是什么:
NSMutableArray * arr1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil];[arr1 addObject:@"0"]; [arr1 replaceObjectAtIndex:2 withObject:@"3"]; NSLog(@"%@",arr1);

答案:(B)

A、0,1,2,3

B、1,2,3,0//下标为2的对象是@"3",替换的对象还是@"3"

C、1,3,3,0

D、0,3,2,3


46、
下列有效的键路径是:
答案:(B)
A、[foo valueForKeyPath:@”1SomeMember”]
B、[foo valueForKeyPath:@”someMember.someAttribute”]
C、[foo valueForKeyPath:@”SOMEMEMBER@someAttibute”]
D、[foo valueForKeyPath:@”some Member”]


47、
有一个类Student,要求实现:定义一个实例初始化方法,初始化方法需要传入名字和性别:
答案:(B)
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; }}


48、
下面哪个选项对集合的描述是正确的:
答案:(D)
A、集合内不能存不同类型的对象//只要是对象就可以,但是不能存放重复的对象
B、集合内可以存整型的数//只能是对象
C、字典内键值可以相同,但是每个键值对应的对象必须不同//键值对应的value可以相同
D、集合内只能存对象


49、
NSString 和 NSMutableString的关系和区别描述不正确的是:
答案:(D)
A、NSString是不可变字符串,即本身内容不能被改变。
B、NSMutableString是可变字符串,即本身内容可修改。
C、NSMutableString是NSString的子类。
D、NSString和NSMutableString没有任何关系。//有继承关系


50、
下面哪个选项无内存问题的:
答案:(C)
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];}//没有使用alloc开辟,不需要手动释放


51、
关于NSSet描述正确的有:
答案:(B)
A、NSSet可以存放任何数据类型的数据。//只能是对象
B、NSSet存放数据是无序的。
C、NSSet可以通过下标获取数据。//无序存储
D、NSSet存放的数据是有序的。


52、
下列哪个选项不能作为property的可选属性:
答案:(A)
A、alloc
B、retain
C、atomic
D、strong


53、
NSRange是什么数据类型:
答案:(C)
A、数组
B、字典
C、结构体
D、指针


54、
下面描述正确的选项是:
答案:(B)
A、当计数器为1时,dealloc方法由系统自动调用//计数器为0 时才调用dealloc
B、一个对象在引用计数变为0时,会调用自己的dealloc方法
C、在dealloc方法里,应该在[super dealloc]后释放本类所拥有的对象//先释放本类拥有对象再调用父类的dealloc方法
D、开启ARC后,可以重载dealloc,必须在dealloc里写 [super dealloc]方法//ARC模式下无需手动写内存释放方法.


55、
实例变量默认的访问修饰符是:
答案:(C)
A、@public
B、@private
C、@protected
D、@package


56、
下面程序段的输出结果是什么:
NSArray * arr1 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil]; NSString *str; str = [arr1 objectAtIndex:2]; NSLog(@"%@",str);
答案:(C)
A、1
B、2
C、3
D、程序崩溃


57、
@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]);
答案:(D)
A、per.name = -1;
B、per.name = 0;
C、per.name = 1;
D、per.name = 2;


58、
下面程序段的输出结果是什么:
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil]; [dic removeObjectForKey:@"3"]; NSLog(@"%@",dic);//字典打印时前边是键,后边是值
答案:(C)
A、1=2 3=4
B、1=2 2=3
C、2=1 4=3
D、2=1 3=2


59、
关于协议描述不正确的是:
答案:(D)
A、协议分正式和非正式协议。
B、在要求确认协议的类必须实现协议中的方法时,可以使用@required。
C、一个协议可以被多个类确认。
D、协议中声明的方法,默认是@optional的。//默认是required


60、
下面哪个选项是正确的:
答案:(B)
A、用继承可以扩展一个类,要调用扩展的方法,既可以用父类,也可以用子类//父类不能调用子类的方法
B、用类目可以扩展一个类,可以直接用该类或该类的实例对象,去调用该类目扩展的方法
C、延展就是类目//延展extension,类目category
D、可以在一个类的外部,调用这个类延展的方法//延展中的方法都是私有的


61、
以下对类的描述不正确的是:
答案:(C)
A、类的接口部分可以包含实例变量、属性和方法
B、可以把声明和实现都放到.h文件中
C、一对文件(Person.h Person.m)只能定义一个类//可以定义多个类
D、类比较抽象,对象比较具体


62、
声明一个返回值为NSArray,并且带两个字符串对象的BLOCK类型变量:
答案:(D)
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)//block用^来修饰


63、
Objective-C 语言中类的实例变量如果只可以被本类和其子类访问,需要下列哪个修饰符:
答案:(C)
A、@public
B、@private//子类也访问不到,外部更拿不到
C、@protected
D、@friendly


64、
关于类目、延展的描述错误的是:
答案:(B)
A、延展主要为类提供“私有”方法
B、类目、延展不但能为类添加方法,而且都可以添加新的实例变量//类目不能添加实例变量
C、无论能否拿到类的源码,类目都可以对其扩展
D、类目和延展声明语法不同


65、
现要求声明一个集合,并将字符串添加到集合中,编写了如下代码,其中错误的是第几行:NSString * aString = [[NSString alloc] initWithString:@"iLanou"]; (1)[aString autorelease]; (2)NSArray * arr = [NSArray array]; (3)[arr addObject:aString]; //不可变数组没有addObject方法 (4)NSLog(@"string = %lu",[aString retainCount]);
答案:(C)
A、(1)
B、(2)
C、(3)
D、(4)


66、
查看下列代码,能正确输出number的选项是:
@interface MyClass : NSObject { int number; } +(void) printNumber; @end @implementation MyClass +(void) printNumber { number =10; NSLog(@""%d"",number); } @end
答案:(D)
A、[MyClass printNumber];
B、MyClass * obj = [[MyClass alloc] init]; [obj printNumber];
C、printNumber();
D、编译错误,无法执行。//@""%d"",引号太多了


67、
读代码
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的值为:
答案:(D)
A、iLanou
B、iL123
C、iLaios
D、iLa123


68、
对于下面代码说法正确的是:
@property (copy,nonatomic,readonly)NSString * calValue;//只能读不能写,只有getter方法,没有setter方法.不能保证多线程安全
答案:(D)
A、没有getter方法,当对calvalue赋值时,将产生一个NSString副本。
B、此属性可保证多线程安全。
C、此属性在合成时可以生成设置器方法。//应该是访问器
D、此属性只能读取,不能赋值。


69、
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);
结果是:
答案:(C)
A、123
B、234
C、2
D、3


70、
下面程序段的输出结果是什么:
NSString * aString = [[NSString alloc] initWithFormat:@"123"]; NSLog(@"%d",aString.retainCount); aString = @"456"; NSLog(@"%d",aString.retainCount); [aString release]; aString = @"789"; NSLog(@"%d",aString.retainCount);
答案:(D)
A、1,2,1
B、1,1,0
C、1,-1,0
D、1,-1,-1 //便利构造器中个的alloc先+1 ,指针指向@"123",后指针指向改变,指向了常量区对象@"456",引用计数为-1,指针又重新指向新对象@"789",新对象引用计数为-1.
71、
下面程序段的输出结果是什么:
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil]; NSString *str = @"3";int a = 3;[dic setObject:a forKey:str]; NSLog(@"%@",dic);
答案:(D)
A、2=1 3=3 4=3
B、1=2 3=3 3=4
C、1=2 3=3 3=3
D、程序崩溃 //setobject :a ,a是基本数据类型,value只能是对象


72、
写出下面程序段的输出结果:
NSString * aString = [[NSString alloc] initWithString:@"123"]; [aString autorelease]; NSMutableArray * arr = [NSMutableArray array]; [arr addObject:aString]; NSLog(@"string = %lu",[aString retainCount]);
答案:(C)
A、1
B、0
C、整型最大值 //18446744073709551615
D、2


73、
NSMutableDictionary字典中删除对象可以使用下面那个方法:
答案:(D)
A、filteredArrayUsingPredicate:
B、arrayByAddingObject:
C、initWithCapacity:
D、setValue:forKey:


74、
有如下一个类定义
@interface MyClass:NSObject @property(nonatomic,retain)NSString *str; @end @implementation MyClass (1)-(NSString *)str{ return str;} -(void)dealloc{ self.str = nil; [super dealloc];} @end
(1)处补充完整:
答案:(C)
A、-(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;}


75、
下列哪个操作不会引起引用计数(retaincount)的变化是:
答案:(B)
A、NSString *str1 = [[NSString stringWithFormat:@"hehe"];//构造便利器内部发生引用计数的变化 B、int a=1; C、NSMutableData *data1 = [NSMutableData allocWithZone:data2]; D、NSArray *arr1 = [[NSArray alloc]initWithArray:arr2];


76、
下面程序段的输出结果是什么:
NSString * aString = [[NSString alloc] initWithString:@"hehe"]; [aString autorelease]; NSMutableArray *arr = [NSMutableArray array]; [arr addObject:aString]; NSLog(@"string = %d",[aString retainCount]);
答案:(A)
A、string = -1
B、string = 0
C、string = 1
D、string = 2


77、
下面程序段的输出结果是什么:
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); // 字典中键不能重复
答案:(C)
A、1=2 1=3 1=4
B、2=1 3=1 4=1
C、1=4
D、4=1
78、
下面程序段的输出结果是什么:
int a = 10; NSNumber *b = [[NSNumber alloc] initWithInt:a]; NSLog(@"%d", a+++b);
答案:(D)
A、21
B、20
C、30
D、编译错误 // 输出时类型不匹配,b是一个对象


79、
下面程序段的输出结果是什么:
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil]; [dic setObject:@"1" forKey:@"3"]; [dic removeObjectForKey:@"1"];//没有key为1的值 NSLog(@"%@",dic);
答案:(C)
A、1=3 2=3 3=4
B、1=2 1=3 3=4
C、2=1 3=1 4=3
D、3=1 3=2 4=3


80、
下列选项中不能正常为emp的name属性赋值的代码有:
答案:(B)
A、emp.name=@"李嘉诚";
B、emp->name=@"李开复";
C、[emp setValue:@"柳传志" forKey:@"name"];
D、[emp setName:@"黄光裕"];


1、
一个文件中可以声明多个类。
答案:(T)
正确
错误


2、
实例对象都是通过调用类方法生成的。
答案:(T)
正确
错误


3、
方法需要传递多个参数时,参数以逗号分隔。//参数用:隔开
答案:(F)
正确
错误


4、
不是每个对象都有引用计数。 //每个对象都有引用计数
答案:(F)
正确
错误


5、
Objective-C 可以多重继承。
答案:(F)
正确
错误


6、
为了保证程序不产生额外的内存开销,当对象不再被需要以后,应当被立即销毁。
答案:(T)
正确
错误


7、
retain的作用是引用计数减一。//+1
答案:(F)
正确
错误


8、
注释可以出现在程序的任何位置。
答案:(T)
正确
错误


9、
在dealloc方法中对变量的释放顺序与初始化的顺序相同。//相反,初始化时先调父类初始化方法,释放时,先释放自身,再调用父类释放方法
答案:(F)
正确
错误


10、
便利构造器产生的对象应当由使用者进行销毁。//便利构造器内部已经实现了开辟与释放的平衡,不需要手动释放.
答案:(F)
正确
错误

推荐阅读更多精彩内容