选择题

1、请看下面一段代码,请问访问a,b,c 3种类型变量的效率从高到低依次是 (B)

static int a = 1;
int main(){
    int b = 2;
    char *c = NULL;
    c = (char *)malloc(100 * sizeof(char));
    return 0;
}

A. cba
B. abc
C. acb
D. bca

3、Shell中,将command1的输出作为command2的输入应该使用的命令是 (D)

A. command1 && command2
B. command1 > command2
C. command1 & command2
D. command1 | command2

4、下面的数据结构中不属于线性结构的是 (C)

A. 栈
B. 链表
C. 二叉树
D. 线性表

5、在一个二叉树上,第5层最多可以有的节点数是 (C)

A. 2
B. 8
C. 16
D. 32

6、在长度为n的线性表上进行顺序查找,在最糟糕的情况下需要的比较次数是 (A)

A. n
B. 2n-1
C. 2n
D. n^2

7、下面那项不是动态语言的特性 (B)

A. 在运行时替换一个类
B. 在运行时动态加载lib文件
C. 在运行时修改对象中的方法
D. 在运行时增加对象的方法

8、已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 (A)

A. cedba
B. acbed
C. decab
D. deabc

9、以下多线程对int型变量x的操作,哪个不需要进行同步: (D)

A. x=y
B. x++
C. ++x
D. x=1

11-20 Objective-C & Xcode
10、多线程中栈与堆是公有的还是私有的 (C)

A. 栈公有, 堆私有
B. 栈公有,堆公有
C. 栈私有, 堆公有
D. 栈私有,堆私有

11、在Xcode中,需要编译混合objective-c和C++的源码文件,需要将文件格式的后缀改为 (C)

A. .c
B. .cpp
C. .mm
D. .m

12、Objective-C声明一个类所要用到的编译指令是 (A)

A. @interface SomeClass
B. @protocol SomeClass
C. @implementation SomeClass
D. @autorelease SomeClass

13、使用Xcode创建工程时,支持同时创建的版本管理库是 (C)

A. Subversion
B. Mercurial
C. Git
D. Concurrent Versions System

14、下面那个方法不属于NSObject的内省(Introspection)方法 (A)

A. init
B. isKindOfClass
C. responseToSelector
D. isMemberOfClass

15、使用protocol时,声明一组可选择实现与否的函数,需要在声明的前一行加上: (B)

A. @required
B. @optional
C. @interface
D. @protocol

16、需要在手动管理内存分配和释放的Xcode项目中引入和编译用ARC风格编写的文件,需要在文件的Compiler Flags上添加参数: (B)

A. -shared
B. -fno-objc-arc -fno-objc-arc//
C. -fobjc-arc
D. -dynamic

17、下面关于Objective-C内存管理的描述错误的是 (A)

A. 当使用ARC来管理内存时,代码中不可以出现autorelease
B. autoreleasepool 在 drain 的时候会释放在其中分配的对象
C. 当使用ARC来管理内存时,在线程中大量分配对象而不用autoreleasepool则可能会造成内存泄露
D. 在使用ARC的项目中不能使用NSZone

18、下面关于#import和#include的描述正确的是 (A)

A. #import 是 #include 的替代指令,防止重复引用

B. #import 和 #include 不可以混合使用
C. #import 只用于引用 Objective-C的文件, #include 只用于引用C和C++的文件
D. #import 和 #include 的使用效果完全相同

19、下面的代码问题在哪?(B)

@implementation xxx


-(void) setVar:(int)i {
self.var = i;
}
A. 应该将var synthesize
B. 调用会出现死循环
C. 正常
D. 返回值错误

20、下面那个方法可以比较两个NSString *str1, *str2 的异同 (B)

A. if(str1 = str2) xxx ;
B. if([str1 isEqualToString:str2]) xxx ;
C. if(str1 && str2) xxx ;
D. if([str1 length] == [str2 length]) xxx;

21-30 iOS

21、下面哪个不属于对象数据序列化方法 (D)

A. JSON
B. Property List
C. XML

D. HTTP

22、在UIKit中,frame与bounds的区别是 (C)

A. frame 是 bounds 的别名
B. frame 是 bounds 的继承类
C. frame 的参考系是父视图坐标,bounds 的参考系是自身的坐标
D. frame 的参考系是自身坐标,bounds 的参考系是父视图的坐标

23、Objective-C有私有方法吗?有私有变量吗? (C)

A. 有私有方法和私有变量
B. 没有私有方法也没有私有变量
C. 没有私有方法,有私有变量
D. 有私有方法,没有私有变量

24、下面关于线程管理错误的是 (B)

A. GCD所用的开销要比NSThread大
B. 可以在子线程中修改UI元素
C. NSOperationQueue是比NSthread更高层的封装
D. GCD可以根据不同优先级分配线程

25、下面代码的作用是让doSomeThing函数每隔1秒被调用1次。请问哪里有问题(A)

NSTimer *myTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(doSomeThing:) userInfo:nil repeats:YES];
[myTimer fire]
A. 没有将timer加入runloop
B. doSomeThing缺少参数
C. 忘记传递数据给userInfo
D. myTimer对象未通过[[myTimer alloc] init]方法初始化

26、UIViewController在显示过程中,各个方法的调用顺序是 (A)

A. init -> viewDidLoad -> viewDidAppear -> viewDidUnload
B. init -> viewDidAppear -> viewDidLoad -> viewDidUnload
C. init -> viewDidLoad -> viewDidUnload -> viewDidAppear
D. init -> viewDidAppear -> viewDidUnload -> viewDidLoad

27、使用imageNamed方法创建UIImage对象时,与普通的init方法有什么区别? (C)

A. 没有区别,只是为了方便
B. imageNamed方法只是创建了一个指针,没有分配其他内存
C. imageNamed方法将图片加载到内存中后不再释放
D. imageNamed方法将使用完图片后立即释放

28、一个类的delegate(代理)的作用不正确的是 (D)

A. delegate中的函数在其他类中实现
B. 主要用于不同类型的对象之间一对一传递消息
C. 没有指派则不会触发
D. 可以一个对象的delegate指派给多个其他类型的对象

29、在没有navigationController的情况下,要从一个ViewController切换到另一个ViewController应该 (D)

A. [self.navigationController pushViewController:nextViewController animated:YES];
B. [self.view addSubview:nextViewController.view];
C. [self pushViewController:nextViewController animated:YES];
D. [self presentModalViewController:nextViewController animated:YES];

30、什么是key window? (C)

A. App中唯一的那个UIWindow对象
B. 可以指定一个key的UIWindow
C. 可接收到键盘输入等事件的UIWindow
D. 不可以隐藏的那个UIWindow对象

1、在Xcode中,需要编译混合Object-C和C++的原码文件,需要将文件格式的后缀改为(C)

A、.c B、.cpp C、 .mm D、.m

2、下面关于Object-C内存管理的描述,错误的是(A)

A、当使用ARC来管理内存时,代码中不可以出现autorelease
B、autoreleasepool在drain的时候会释放在其中分配的对象
C、当使用ARC来管理内存是,在现场中大量分配对象而不用autoreleasepool,则可能会造成内存泄露
D、在使用ARC的项目中不能使用NSZone

3、使用Xcode创建工程时,支持同时创建爱你版本管理库是(C)

A、Subversion B、Mercurial C、Git D、Concurrent Versions

4、Objective-C声明一个类所要用到的编译指令是(A)

A、@interface SomeClass
B、@protocol SomeClass
C、@implementation SomeClass
D、@autorelease SomeClass

5、UIViewController在显示过程中,各个方法的调用顺序是(A)

A、entitle -> viewDidLoad -> viewDidAppear -> viewDidUnload
B、entitle -> viewDidAppear -> viewDidLoad -> viewDidUnload
C、entitle -> viewDidLoad -> viewDidUnload -> viewDidAppear
D、entitle -> viewDidAppear -> viewDidUnload -> viewDidLoad

6、使用protocol时,声明一组可选择实现与否的函数,需要在声明的前一行加上(B)

A、@required B、@optional C、@interface D、@protocol

7、下面关于#import和#include的描述正确的是(C)

A、#import和#include不可以混合使用
B、#import只用于引用Objective-C的文件,#include只用于引用C和C++文件
C、#import是#include的替代指令,防止重复引用
D、#import和#incline的使用效果完全相同

8、在没有navigationControler的情况下,要从一个ViewController切换到另一个ViewController可以(D)

A、[self.navigationController pushViewController:nextViewController animated:YES];
B、[self.view addSubciew:nextViewController animated:YES];
C、[self pushViewController:nextViewController animated:YES];
D、[self presentModalViewController:nextViewController animated:YES];

9、下面四种内部排序算法中哪一种在最差情况下时间复杂度最高(B)

A、快速排序
B、冒泡排序
C、堆排序
D、归并排序

10、按照以下代码,至步骤3是aLabel的引用计数器的值是(C)

1:UILable *aLabel = [[UILabel allocation] initWithFrame:CGRectMake(0,0,320,60)]; // 1
2:[self.view addSubview:aLabel]; // 2
3:[aLabel release]; // 1
A、-1 B、0 C、1 D、2

11、在UIKit中,frame与bounds的区别是(C)

A、frame是bounds的别名
B、frame是bounds的继承类
C、frame的参考系是父视图坐标,bounds的参考系是自身的坐标
D、frame的参考系是自身坐标,bounds的参考系是父视图的坐标

1.即时聊天app不会采用的网络传输方式是 D

A UDP
B TCP
C Http
D FTP

2.下列技术不属于多线程的是 A

A Block
B NSThread
C NSOperation
D GCD

3.线程和进程的区别不正确的是 B

A 进程和线程都是由操作系统所体会的程序运行的基本单元
B 线程之间有单独的地址空间
C 进程和线程的主要差别在于它们是不同的操作系统资源管理方式
D 线程有自己的堆栈和局部变量

  1. 堆和栈的区别正确的是 D

A 对于栈来讲,我们需要手工控制,容易产生memory leak。
B 对于堆来说,释放工作由编译器自动管理,无需我们手工控制
C 在Windows下,栈是向高地址扩展的数据结构,是连续的内存区域,栈顶的地址和栈的最大容量是系统预先规定好的。
D 对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。

  1. 对于runloop的理解不正确的是 C

A 每一个线程都有其对应的RunLoop
B 默认非主线程的RunLoop是没有运行的
C 在一个单独的线程中没有必要去启用RunLoop
D 可以将NSTimer添加到runloop中

  1. UITableView中cell的复用是由几个数组实现的 B

A 1
B 2
C 3
D 3或4

  1. 在线播放视频一般访问服务器中的 类型文件 A

A M3U8
B flv
C MP4
D data

  1. 点击Button响应链中最终得到响应的是 B

A Window
B Application
C AppDelegate
D UIViewController

11 断点续传需要在请求头中添加的控制续传最重要的关键字是 A

A range
B length
C type
D size

12 post传输的最大文件限制为 C

A 1G
B 2G
C 4G
D 8G

1-10 C语言 & 计算机基础
1、请看下面一段代码

static int a = 1;
int main(){
int b = 2;
char *c = NULL;
c = (char *)malloc(100 * sizeof(char));
return 0;
}
请问访问a,b,c 3种类型变量的效率从高到低依次是
A. cba
B. abc
C. acb
D. bca
(B)

2、下面四种内部排序算法中哪一种在最差情况下时间复杂度最高?

A. 快速排序
B. 冒泡排序
C. 堆排序
D. 归并排序
(B)

3、Shell中,将command1的输出作为command2的输入应该使用的命令是

A. command1 && command2
B. command1 > command2
C. command1 & command2
D. command1 | command2
(D)

4、下面的数据结构中不属于线性结构的是

A. 栈
B. 链表
C. 二叉树
D. 线性表
(C)

5、在一个二叉树上,第5层最多可以有的节点数是

A. 2
B. 8
C. 16
D. 32
(C)

6、在长度为n的线性表上进行顺序查找,在最糟糕的情况下需要的比较次数是

A. n
B. 2n-1
C. 2n
D. n^2
(A)

7、下面那项不是动态语言的特性

A. 在运行时替换一个类
B. 在运行时动态加载lib文件
C. 在运行时修改对象中的方法
D. 在运行时增加对象的方法
(B)

8、已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是

A. cedba
B. acbed
C. decab
D. deabc
(A)

9、以下多线程对int型变量x的操作,哪个不需要进行同步:

A. x=y
B. x++
C. ++x
D. x=1
(D)

10、多线程中栈与堆是公有的还是私有的

A. 栈公有, 堆私有
B. 栈公有,堆公有
C. 栈私有, 堆公有
D. 栈私有,堆私有
(C)

11-20 Objective-C & Xcode
11、在Xcode中,需要编译混合Objective-C和C++的源码文件,需要将文件格式的后缀改为

A. .c
B. .cpp
C. .mm
D. .m
(C)

12、Objective-C声明一个类所要用到的编译指令是

A. @interface SomeClass
B. @protocol SomeClass
C. @implementation SomeClass
D. @autorelease SomeClass
(A)

13、使用Xcode创建工程时,支持同时创建的版本管理库是

A. Subversion
B. Mercurial
C. Git
D. Concurrent Versions System
(C)

14、下面那个方法不属于NSObject的内省(Introspection)方法

A. init
B. isKindOfClass
C. responseToSelector
D. isMemberOfClass
(A)

15、使用protocol时,声明一组可选择实现与否的函数,需要在声明的前一行加上:

A. @required
B. @optional
C. @interface
D. @protocol
(B)

16、需要在手动管理内存分配和释放的Xcode项目中引入和编译用ARC风格编写的文件,需要在文件的Compiler Flags上添加参数:

A. -shared
B. -fno-objc-arc
C. -fobjc-arc
D. -dynamic
(B)

19、下面的代码问题在哪?

@implementation xxx … …
-(void) setVar:(int)i {
self.var = i;
}
A. 应该将var synthesize
B. 调用会出现死循环
C. 正常
D. 返回值错误
(B)

20、下面那个方法可以比较两个NSString *str1, *str2 的异同

A. if(str1 = str2) xxx ;
B. if([str1 isEqualToString:str2]) xxx ;
C. if(str1 && str2) xxx ;
D. if([str1 length] == [str2 length]) xxx;
(B)

21-30 iOS

21、下面哪个不属于对象数据序列化方法
A. JSON
B. Property List
C. XML
D. HTTP
(D)

22、在UIKit中,frame与bounds的区别是

A. frame 是 bounds 的别名
B. frame 是 bounds 的继承类
C. frame 的参考系是父视图坐标,bounds 的参考系是自身的坐标
D. frame 的参考系是自身坐标,bounds 的参考系是父视图的坐标
(C)

23、Objective-C有私有方法吗?有私有变量吗?

A. 有私有方法和私有变量
B. 没有私有方法也没有私有变量
C. 没有私有方法,有私有变量
D. 有私有方法,没有私有变量
(C)

24、下面关于线程管理错误的是

A. GCD所用的开销要比NSThread大
B. 可以在子线程中修改UI元素
C. NSOperationQueue是比NSthread更高层的封装
D. GCD可以根据不同优先级分配线程
(B)

25、下面代码的作用是让doSomeThing函数每隔1秒被调用1次。请问哪里有问题

NSTimer *myTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(doSomeThing:) userInfo:nil repeats:YES];
[myTimer fire]
A. 没有将timer加入runloop
B. doSomeThing缺少参数
C. 忘记传递数据给userInfo
D. myTimer对象未通过[[myTimer alloc] init]方法初始化
(A)

26、UIViewController在显示过程中,各个方法的调用顺序是

A. init -> viewDidLoad -> viewDidAppear -> viewDidUnload
B. init -> viewDidAppear -> viewDidLoad -> viewDidUnload
C. init -> viewDidLoad -> viewDidUnload -> viewDidAppear
D. init -> viewDidAppear -> viewDidUnload -> viewDidLoad
(A)

27、使用imageNamed方法创建UIImage对象时,与普通的init方法有什么区别?

A. 没有区别,只是为了方便
B. imageNamed方法只是创建了一个指针,没有分配其他内存
C. imageNamed方法将图片加载到内存中后不再释放
D. imageNamed方法将使用完图片后立即释放
(C)

28、一个类的delegate(代理)的作用不正确的是

A. delegate中的函数在其他类中实现
B. 主要用于不同类型的对象之间一对一传递消息
C. 没有指派则不会触发
D. 可以一个对象的delegate指派给多个其他类型的对象
(D)

29、在没有navigationController的情况下,要从一个ViewController切换到另一个ViewController应该

A. [self.navigationController pushViewController:nextViewController animated:YES];
B. [self.view addSubview:nextViewController.view];
C. [self pushViewController:nextViewController animated:YES];
D. [self presentModalViewController:nextViewController animated:YES];
(D)

30、什么是key window? C

A. App中唯一的那个UIWindow对象
B. 可以指定一个key的UIWindow
C. 可接收到键盘输入等事件的UIWindow
D. 不可以隐藏的那个UIWindow对象

31 求以下程序段的输出

int test(int x, int y){
    x = x + y;
    return x * y;
}
int main(int argc, const char * argv[]){
    @autoreleasepool {
        int x = 3, y = 10, z = test(x, y);
        NSLog(@"%d%d", x++, ++z);
    }   
    return 0;
}

答案是 A
A 3, 131
B 330
C 431
D 430

32 求以下程序段的输出

int func(int x){
    int countx = 0;
    while (x) {
        countx++;
        x = x&(x-1);
    }
    return countx;
}
int main(int argc, const char * argv[]){
    @autoreleasepool {
        NSLog(@"%d", func(2013));    
    }    
    return 0;
}

答案: D
A 1
B 5
C 8
D 9

34 对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象? A

A 编译时是NSString的类型;运行时是NSData类型的对象
B 编译时是NSObject的类型;运行时是NSData类型的对象
C 编译时是NSData的类型;运行时是NSString类型的对象
D 编译时是NSObject的类型;运行时是NSString类型的对象

35 Object C中的线程下面描述不正确的是 B

A 使用NSThread创建、使用GCD的dispatch
B 直接使用NSOperation,然后将其加入NSOperationQueue;
C 在主线程执行代码,方法是performSelectorOnMainThread,
D 如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:

36 下列不属于iOS存储方式的是 A

A NSFileManager
B 归档
C SQLite
D CoreData

37 IP Phone的原理是什么? C

A IPV4
B DHCP
C IPV6
D DNS

38 类别的作用不正确的是 D

A 将类的实现分散到多个不同文件或多个不同框架中。
B 创建对私有方法的前向引用。
C 向对象添加非正式协议。 继承可以增加,修改或者删除方法。
D 不能添加属性

39 对NSOperationQueue理解不正确的是 D

A 存放NSOperation的集合类
B 可以设置最大并发数
C 放进去的线程会自动执行
D 用户需要管理放进去的线程执行顺

1、执行下面程序后NSLog的输出结果():C

int main(int argc, const char * argv[]) {
    int a[5] = {1,2,3,4,5};
    int *ptr = (int *)(&a+1);
    NSLog(@"%d,%d",*(a+1),*(ptr-1));// 2,5
    return 0;
}

A、1,1,B、2,1,C、2,5,D、运行错误

2、执行下面代码后,obj1对象的retain count是多少?:B

ClassA *obj1 = [[[ClassA alloc] init] autorelease];
ClassA *obj2 = obj1;
[obj2 retain];
[obj1 release];
NSLog(@"%lu",(unsigned long)obj1.retainCount); // 1

A、0,B、1,C、2,D、3

3、执行下面车呢关旭后NSLog的输出结果为:B

int main(int argc, const char * argv[]) {
    
    NSArray *mArray1 = [NSArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c", nil];
    
    NSArray *mArrayCopy2 = [mArray1 copy];
    
    NSMutableArray *mArrayMCopy1 = [mArray1 mutableCopy];
    
    NSMutableString *testString = [mArray1 objectAtIndex:0];
    
    [testString appendString:@"1"];
    
    NSLog(@"%@,%@,%@",[mArray1 objectAtIndex:0],[mArrayCopy2 objectAtIndex:0],[mArrayMCopy1 objectAtIndex:0]); // a1,a1,a1
    
    return 0;
    
}

A、a,a1,a1, B、a1,a1,a1, C、a1,a,a, D、a1,a1,a

4、执行下面程序后NSLog的输出结果为:C

int main(int argc, const char * argv[]) {
    
    NSMutableSet *set = [NSMutableSet setWithCapacity:3];
    
    Person *person1 = [[Person alloc] init];
    
    [person1.name](http://person1.name) = @"Mark";
                   

    person1.age = 1;
                   
    [set addObject:person1];
                   
    Person *person2 = person1;
                   
    [person2.name](http://person2.name) = @"Mark";
                                  
    person2.age = 2;
                                  
    [set addObject:person2];
    Person *person3 = [[Person alloc] init];
                                  
    [person3.name](http://person3.name) = @"Mark";
                                                 
    person3.age = 3;
                                                 
    [set addObject:person3];
                                                 
    NSEnumerator *e = [set objectEnumerator];
                                                 
    Person *person;
                                                 
    while (person = [e nextObject]) {
        // 2
        // 3
        NSLog(@"%d",person.age);
    }
                                                 
    return 0;                                      
}

A、123 B、223 C、23 D、13

5、下面那个是为了解决圆形类与循环引用问题:C

A、@property (nonatomic)
B、@property (copy)
C、@property (assign)
D、@property (retain)

  1. 以下哪一段代码不会抛出异常()
    正确答案: C

A、NSArray *array=@[1,2,3];NSNumber * number=array[3];
B、NSDictionary *dict=@{@”key”:nil};
C、NSString *str=nil;NSString *str2=[str substringFromIndex:3];
D、NSString *str=@”hi”;NSString *str2=[str substringFromIndex:3];

解析:
A:OC数组中的元素不能是基本数据类型,必须是对象,并且array[3]下标越界,Xcode编译时报错
B:字典中键值对不能为nil,运行时崩溃
C:OC中向空对象发送消息,不执行任何操作,不报错,不崩溃
D:数组下标越界,运行时崩溃

  1. delegate中的property使用以下哪个属性()
    正确答案: A

A、assign
B、retain
C、copy
D、strong

解析:
delegate中文叫做委托,通常会用在class内部把一些事件处理”委托”给别人去完成。
为什么我们不用retain而要用assign呢?
原因就是在于iOS的reference counting的环境中,我们必须解决circular count的问题。
(循环计数)assign 防止循环引用

  1. C和Objective-C的混合使用,以下描述错误的是()
    正确答案: B

A、cpp文件只能使用C/C++代码
B、cpp文件include的头文件中,可以出现objective-C的代码
C、mm文件中混用cpp直接使用即可
D、cpp使用objective-C的关键是使用接口,而不能直接使用代码

解释:
B:obj-c 的编译器处理后缀为 m 的文件时,可以识别 obj-c 和 c 的代码,处理 mm 文件可以识别 obj-c,c,c++ 代码,但cpp 文件必须只能用 c/c++ 代码,而且 cpp 文件 include 的头文件中,也不能出现 obj-c 的代码,因为 cpp 只是 cpp

  1. 关于Objective-C中属性的说明,以下错误的是()
    正确答案: D

A、readwrite是可读可写特性,需要生成getter方法和setter方法
B、readonly是只读特性,只有getter方法,没有setter方法
C、assign是赋值属性,setter方法将传入参数赋值给实例变量
D、retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象

解释:
Copy是创建一个新对象,Retain是创建一个指针,引用对象计数加1。
Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。
Retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝

  1. 下面关于线程管理错误的是()
    正确答案: B

A: GCD在后端管理着一个线程池
B: NSOperationQueue是对NSthread的更高层的封装
C: NSThread需要自己管理线程的生命周期
D: GCD可以根据不同优先级分配线程

解析:
B是错的,NSOperationQueue是对GCD的更高层的封装
C是对的。
// 初始化线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
// 设置线程的优先级(0.0 – 1.0,1.0最高级)
thread.threadPriority = 1;
// 开启线程
[thread start];

  1. 在没有navigationController的情况下,要从一个ViweController切换到另一个ViewController应该()
    正确答案: C

A: {self navigationController pushViewController:nextViewController animated:YES};
B: {self view addSubview:nextViewController.view};
C: {self presentModalViewController:nextViewController animated:YES};
D: {self pushViewController:nextViewController animated:YES};

解析:
A是navigationController包裹下的控制器才使用的跳转,不符合题意
B是加载一个控制器的view,也是错的
C是IOS中的模态切换,符合题意,所以C是正确答案
D明显就是错误的
A 的话需要 NavigationController
B 的话需要使用 ViewController 容器
D 也需要 NavigationController

7.下面对category描述不正确的是()
正确答案: B

A: category可以添加新的方法
B: category可以删除修改之前的方法
C: 将类的实现分散到多个不同文件或多个不同框架中
D: 创建对私有方法的前向引用

  1. iOS中的数据持久化方式()
    正确答案: D

A: 属性列表
B: 对象归档
C: SQLite和CoreData
D: 以上全部

  1. NSRunLoop的以下描述错误的是()
    正确答案: C

A、Runloop并不是由系统自动控制的
B、有3类对象可以被run loop监控:sources,timers,observers
C、线程是默认启动run loop的
D、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的中。

一、选择题
1、执行下面程序后NSLog的输出结果():C

int main(int argc, const char * argv[]) {
    int a[5] = {1,2,3,4,5};
    int *ptr = (int *)(&a+1);
    NSLog(@"%d,%d",*(a+1),*(ptr-1));// 2,5
    return 0;
}

A、1,1,B、2,1,C、2,5,D、运行错误

2、执行下面代码后,obj1对象的retain count是多少?:B

ClassA *obj1 = [[[ClassA alloc] init] autorelease]; // obj1:1
ClassA *obj2 = obj1; // obj1:2
[obj2 retain]; // obj1:2
[obj1 release]; // obj1:1
NSLog(@"%lu",(unsigned long)obj1.retainCount); // 1

A、0,B、1,C、2,D、3

3、执行下面代码后,NSLog的输出结果为:B

int main(int argc, const char * argv[]) {
    NSArray *mArray1 = [NSArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c", nil];
    NSArray *mArrayCopy2 = [mArray1 copy];
    NSMutableArray *mArrayMCopy1 = [mArray1 mutableCopy];
    NSMutableString *testString = [mArray1 objectAtIndex:0]; 
    [testString appendString:@"1"];
    NSLog(@"%@,%@,%@",[mArray1 objectAtIndex:0],[mArrayCopy2 objectAtIndex:0],[mArrayMCopy1 objectAtIndex:0]); // a1,a1,a1
    return 0;
}

A、a,a1,a1, B、a1,a1,a1, C、a1,a,a, D、a1,a1,a

4、执行下面程序后NSLog的输出结果为:C

int main(int argc, const char * argv[]) {
    NSMutableSet *set = [NSMutableSet setWithCapacity:3];
    Person *person1 = [[Person alloc] init];
    [person1.name](http://person1.name) = @"Mark";
    person1.age = 1;
    [set addObject:person1];
    Person *person2 = person1;
    [person2.name](http://person2.name) = @"Mark";
    person2.age = 2;
    [set addObject:person2];
    Person *person3 = [[Person alloc] init];
    [person3.name](http://person3.name) = @"Mark";
    person3.age = 3;
    [set addObject:person3];
    NSEnumerator *e = [set objectEnumerator];
    Person *person;
    while (person = [e nextObject]) {
        //         2
        //         3
        NSLog(@"%d",person.age);
    }
    return 0;
}

A、123 B、223 C、23 D、13

5、下面那个是为了解决圆形类与循环引用问题:C

A、@property (nonatomic)
B、@property (copy)
C、@property (assign)
D、@property (retain)

  1. 以下哪一段代码不会抛出异常()
    正确答案: C

A、NSArray *array=@[1,2,3];
NSNumber * number=array[3];
B、NSDictionary *dict=@{@”key”:nil};
C、NSString *str=nil;
NSString *str2=[str substringFromIndex:3];
D、NSString *str=@”hi”;
NSString *str2=[str substringFromIndex:3];

解析:
A:OC数组中的元素不能是基本数据类型,必须是对象,并且array[3]下标越界,Xcode编译时报错
B:字典中键值对不能为nil,运行时崩溃
C:OC中向空对象发送消息,不执行任何操作,不报错,不崩溃
D:数组下标越界,运行时崩溃

  1. delegate中的property使用以下哪个属性()
    正确答案: A

A:assign
B:retain
C:copy
D:strong

delegate中文叫做委托,通常会用在class内部把一些事件处理”委托”给别人去完成。
为什么我们不用retain而要用assign呢?
原因就是在于iOS的reference counting的环境中,我们必须解决circular count的问题。
(循环计数)assign 防止循环引用

  1. C和Objective-C的混合使用,以下描述错误的是()
    正确答案: B

A、cpp文件只能使用C/C++代码
B、cpp文件include的头文件中,可以出现objective-C的代码
C、mm文件中混用cpp直接使用即可
D、cpp使用objective-C的关键是使用接口,而不能直接使用代码

解释:
B obj-c 的编译器处理后缀为 m 的文件时,可以识别 obj-c 和 c 的代码,处理 mm 文件可以识别 obj-c,c,c++ 代码,但cpp 文件必须只能用 c/c++ 代码,而且 cpp 文件 include 的头文件中,也不能出现 obj-c 的代码,因为 cpp 只是 cpp

  1. 关于Objective-C中属性的说明,以下错误的是()
    正确答案: D

A:readwrite是可读可写特性,需要生成getter方法和setter方法
B:readonly是只读特性,只有getter方法,没有setter方法
C:assign是赋值属性,setter方法将传入参数赋值给实例变量
D:retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象

解释:Copy是创建一个新对象,Retain是创建一个指针,引用对象计数加1。
Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。
Retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝

  1. 下面关于线程管理错误的是()
    正确答案: B

A:GCD在后端管理着一个线程池
B:NSOperationQueue是对NSthread的更高层的封装
C:NSThread需要自己管理线程的生命周期
D:GCD可以根据不同优先级分配线程

B是错的,SOperationQueue是对GCD的更高层的封装
C是对的。
// 初始化线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
// 设置线程的优先级(0.0 – 1.0,1.0最高级)
thread.threadPriority = 1;
// 开启线程
[thread start];

  1. 在没有navigationController的情况下,要从一个ViweController切换到另一个ViewController应该()
    正确答案: C

A: {self navigationController pushViewController:nextViewController animated:YES};
B: {self.view addSubview:nextViewController.view};
C: {self presentModalViewController:nextViewController animated:YES};
D: {self pushViewController:nextViewController animated:YES};

解析:
A是navigationController包裹下的控制器才使用的跳转,不符合题意
B是加载一个控制器的view,也是错的
C是IOS中的模态切换,符合题意,所以C是正确答案
D明显就是错误的
A 的话需要 NavigationController
B 的话需要使用 ViewController 容器
D 也需要 NavigationController

7.下面对category描述不正确的是()
正确答案: B

A: category可以添加新的方法
B: category可以删除修改之前的方法
C: 将类的实现分散到多个不同文件或多个不同框架中
D: 创建对私有方法的前向引用

  1. iOS中的数据持久化方式()
    正确答案: D 你的答案: D (正确)

A: 属性列表
B: 对象归档
C:SQLite和CoreData
D: 以上全部

  1. NSRunLoop的以下描述错误的是()
    正确答案: C

A、Runloop并不是由系统自动控制的
B、有3类对象可以被run loop监控:sources,timers,observers
C、线程是默认启动run loop的
D、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的中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容