選擇題

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閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容