Objective-C考试- 蓝鸥3G-OC考试题
※ 选择题(共40题,每题2分)

    1、NSString *str = @“lanou”;
    [str retain];
    [str autorelease];
此时str的引用计数是________。 答案:(D)
    A、0
    B、1
    C、2
    D、以上都不是

    2、@public修饰过的实例变量,怎样使用?答案:(A)
    A、通过指向操作符访问
    B、通过点访问
    C、通过setter、getter方法访问
    D、以上都不对

    3、下列哪个不是面向对象的编程语言。答案:(C)
    A、C++
    B、JAVA
    C、C语言
    D、OC

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

    5、@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

    6、对[[NSDictionary alloc] initWithObjectsAndKeys:@"a",@"1",@"b",@"2",@"c",@"3", nil]描述正确的是答案:(B)
    A、该字典有6个元素
    B、该字典有3个元素
    C、value值为@"1" @"2" @"3"
    D、创建不可变字典

    7、下列方法中,可以把字符串的首字母转换成为大写的是: 答案:(A)
    A、- (NSString *)capitalizedString
    B、- (id)objectAtIndex:(NSUInteger)index
    C、- (NSString*)lowercaseString
    D、[foo valueForKeyPath:@”some Member”]

    8、NSDictionary * dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"张三",@"name",@"女",@"sex", nil];                        
    NSLog(@"name : %@",[dic1 objectForKey:@“name"]);
打印正确的是:答案:(A)
    A、name : 张三
    B、sex :女
    C、张三:name
    D、女:sex
    9、下列方法中是比较两个字符串内容的方法是:答案:(A)
    A、- (BOOL)isEqualToString:(NSString *)aString;
    B、- (NSString *)capitalizedString
    C、+ (instancetype)arrayWithArray:(NSArray *)array
    D、- (NSString *)uppercaseString

    10、NSMutableArray *array = [NSMutableArray array];
    Person *p5 = [[Person alloc] init];
    NSLog(@"%ld",[p5 retainCount]);       
    [array addObject:p5];
    NSLog(@"%ld",[p5 retainCount]);
    NSLog(@“%ld”,[array retainCount]);
打印结果是_________。答案:(B)
    A、1,1,1
    B、1,2,1
    C、1,2,0
    D、1,0,0

    11、@interface Student:NSObject{
    NSString * _name;
    NSString * _sex;
    NSInteger  _age;
    }
    @end
    #import “Student.h”
    @@interface CollegeStudent:Student{
    NSString * _major;
    }
    @end
关于以上关系,叙述错误的是答案:(C)
    A、学生类继承根类NSObject,大学生类继承学生类
    B、大学生类除了自己的特征和行为,还继承了学生类的特征和行为
    C、继承无传递性
    D、子类可重写父类方法

    12、NSDictionary * dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"张三",@"name",@"女",@"sex", nil];
    NSLog(@“%@“,dic1);
控制台打印的是:答案:(C)
    A、张三 = name, 女 = sex
    B、name= 张三; sex = 女
    C、name = "U5f20U4e09";sex = "U5973";name = "U5f20U4e09"; sex = 女
    D、

    13、关于- (NSComparisonResult)compare:(NSString *)string 说法正确的是: 答案:(C)
    A、比较的是两个字符串的大小
    B、比较的是两个字符串是否相等
    C、这个方法可以用来比较两个字符串内容的大小比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
    D、这是字符串拼接的方法

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

    15、有如下一个类定义 @interface MyClass:NSObject
        @property(nonatomic,retain)NSString *str;
        @end
        @implementation MyClass
        @synthesize str = str;
        @end
下面setter方法书写正确的是()答案:(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;
        }

    16、OC中,()为没有源代码的类添加新方法答案:(B)
    A、继承
    B、类别
    C、复用
    D、重载

    17、-(void)setName:(NSString *)name
        {                                                       
             if (_name!=name) {         //第一行
                [_name release];
                _name = [name retain];
            }
        }
name的setter方法写法第几行有问题_______。答案:(D)
    A、1
    B、2
    C、3
    D、没有错误

    18、下面程序段的输出结果是什么: 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、程序崩溃

    19、下列哪个不是OC语言的特点。答案:(B)
    A、允许在OC中使用C语言源代码,编译器兼容C语言程序
    B、是一种面向过程的编程语言
    C、包含一个运行时系统
    D、类库丰富

    20、NSString *str = @“lanou”;
    [str retain];
     NSLog(@“%lu”,str.retainCount);
此处打印出来的值是多少答案:(A)
    A、ULONG_MAX
    B、1
    C、2
    D、-1

    21、以下说法错误的是_________。答案:(D)
    A、[NSDate date]能得到北京时间
    B、开启ARC后,可以重载dealloc,必须在dealloc里写 [super dealloc]方法
    C、内存管理的管理范围:所有数据类型
    D、以上都不对

    22、下列说法正确的是:答案:(C)
    A、求数组的内容个数用length方法
    B、字典是根据其位置来索引数据的
    C、协议中定义的方法默认是必须实现的
    D、字符串只有NSString不可变字符串这一种

    23、对于语句NSString* testObject = [[NSData alloc] init];关于testObject是什么类型对象,以下说法正确的是: 答案:(A)
    A、编译时,NSString类型,运行时,NSData类型
    B、编译与运行时,都是NSData类型
    C、编译与运行时,都是NSString类型
    D、运行时,NSString类型,编译时,NSData类型

    24、以下说法错误的是_________。答案:(D)
    A、copy标记后,开辟另一块空间,并把原来空间的东西拷贝到新的空间,原来的引用计数不变,新开辟的空间引用计数为1
    B、copy分为浅拷贝和深拷贝
    C、浅拷贝:又叫拷贝指针。就是把自己的地址再赋给自己。并让引用计数+1
    D、深拷贝就是具体的实现copyWithZone:方法时,在里边创建对象,开辟空间,并把指针拷贝到新空间

    25、关于堆区和栈区说法错误的是_________。答案:(C)
    A、对于堆来讲,频繁的开辟和释放势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低
    B、对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块 从栈中间弹出
    C、堆不需要我们进行开辟和释放
    D、栈有2种分配方式:静态分配和动态分配

    26、@implementation Person - (void)setAge:(int)newAge { 
          self.age = newAge;
     } 
    @end 
针对这段代码说法正确的是_______。 答案:(A)
    A、会死循环
    B、书写并不规范
    C、是getter方法
    D、以上都对

    27、关于可见度,叙述错误的是答案:(D)
    A、OC的实例变量可见度有:@public , @protected, @private
    B、@public在类内和类外都可以直接使用,并且可以被继承
    C、@protected,在类外不能使用,在类内可以使用,可以被继承(这是与private的区别)
    D、@private私有可见度,描述的实例变量,在类内不可以使用,但在类外能使用,而不能被继承

    28、以下哪些对象不需要我们释放_________。答案:(D)
    A、数组中的对象
    B、便利构造器创建的对象
    C、字典中的对象
    D、以上都是

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

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

    31、写出下面程序段的输出结果: 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、整型最大值
    D、2

    32、@interface Person : NSObject
    {
    NSString * name;
    }
    @end
创建一个Person类,如何从类的外部访问实例变量name( )。答案:(A)
    A、为成员变量name添加属性访问
    B、为实例变量name添加关键字@private
    C、为实例变量name添加getter方法
    D、无法访问

    33、NSMutableArray *array = @[@"bob", @"steve", @"john"];
    [array addObject:@“Peter"];                         
    NSLog(@“%@”,array);
运行结果是:答案:(B)
    A、bob,steve,john
    B、程序崩溃
    C、bob,steve,john,Peter
    D、steve,john

    34、 下面代码 @implementation Person
            @synthesize age;
            -(void)setAge:(int)newAge
            {
                self.age = newAge;
            }
            @end
为Person实例的name属性赋值时,程序的运行结果是:( )。答案:(C)
    A、正常运行
    B、立即崩溃
    C、陷入死循环
    D、不确定

    35、NSValue *value = [NSValue  valueWithRange:NSMakeRange(10, 20)];                     
    NSRange ra = [value rangeValue];
    NSLog(@"ra = %lu”,ra.location); 
控制台会打印出:答案:(D)
    A、20,20
    B、20,10
    C、20
    D、10

    36、copy下的属性的内部实现_______。 答案:(B)
    A、- (void)setName:(NSString *)name{ 
          if(_name != name){
               [_name release];
               _name = [[name copy] autorelease];
          }
    }
    B、- (void)setName:(NSString *)name{ 
          if(_name != name){
               [_name release];
               _name = [name copy]; 
          }
    }
    C、- (NSString *)name{
          return [[_name copy]autorelease];
    }
    D、- (NSString *)name{
          return [_name copy];
    }

    37、-[Person sayHi]: unrecognized selector sent to instance 0x100114d70 上面崩溃信息可以看出崩溃原因是上面_________。答案:(C)
    A、内存泄露
    B、过度释放
    C、方法没实现
    D、都不是

    38、retain下的属性的内部实现_______。 答案:(A)
    A、- (void)setName:(NSString *)name{      if(_name != name){
            [_name release];
            _name = [name retain];      }
    } 
    B、- (void)setName:(NSString *)name{ 
       if(_name != name){
           [_name release];
           _name = [[name retain] autorelease]; 
       }
    }
    C、- (NSString *)name{ return [_name retain]; }
    D、- (NSString *)name{
        return [_name autorlease]; 
    }

    39、NSMutableString *mutableStr = [NSMutableString stringWithString:@"12345"];
    [mutableStr appendString:@"67890"]; [mutableStr insertString:@"abc" atIndex:5];
    NSRange delRange = NSMakeRange(2, 4);
    id v = [mutableStr deleteCharactersInRange:delRange];
    NSLog(@"%@",v);
    
控制台会打印:答案:(A)
    A、12bc67890
    B、1bc678
    C、bc6789
    D、2bc678

    40、读下列程序: int (^intStr) (NSString *) = ^int(NSString *s){
            return [s intValue];
    };
    int strInt = intStr(@"12我3");
    NSLog(@"strInt = %d", strInt);
控制台会打印:答案:(A)
    A、12
    B、12我
    C、12我3
    D、3

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

    1、NSSet存放的数据是无序的答案:(T)
    正确
    错误

    2、继承是单项的,不能相互继承答案:(T)
    正确
    错误

    3、协议中@optional 修饰的方法是可选的,可实现也可不实现答案:(T)
    正确
    错误

    4、NSArray和NSDictionary都是有序的.答案:(F)
    正确
    错误

    5、Extension只是管理类的“私有”方法答案:(F)
    正确
    错误

    6、继承具有传递性:A继承于B,B继承于C,A只具有B特征和行为答案:(F)
    正确
    错误

    7、给super发消息,可以执行父类中实现的方法答案:(T)
    正确
    错误

    8、数组是靠index来索引元素,index从0开始答案:(T)
    正确
    错误

    9、使用类方法也要构建一个实例对象出来答案:(F)
    正确
    错误

    10、类是创建对象的样板答案:(T)
    正确
    错误