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 線程有自己的堆棧和局部變量
- 堆和棧的區別正確的是 D
A 對于棧來講,我們需要手工控制,容易產生memory leak。
B 對于堆來說,釋放工作由編譯器自動管理,無需我們手工控制
C 在Windows下,棧是向高地址擴展的數據結構,是連續的內存區域,棧頂的地址和棧的最大容量是系統預先規定好的。
D 對于堆來講,頻繁的new/delete勢必會造成內存空間的不連續,從而造成大量的碎片,使程序效率降低。
- 對于runloop的理解不正確的是 C
A 每一個線程都有其對應的RunLoop
B 默認非主線程的RunLoop是沒有運行的
C 在一個單獨的線程中沒有必要去啟用RunLoop
D 可以將NSTimer添加到runloop中
- UITableView中cell的復用是由幾個數組實現的 B
A 1
B 2
C 3
D 3或4
- 在線播放視頻一般訪問服務器中的 類型文件 A
A M3U8
B flv
C MP4
D data
- 點擊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)
- 以下哪一段代碼不會拋出異常()
正確答案: 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:數組下標越界,運行時崩潰
- delegate中的property使用以下哪個屬性()
正確答案: A
A、assign
B、retain
C、copy
D、strong
解析:
delegate中文叫做委托,通常會用在class內部把一些事件處理”委托”給別人去完成。
為什么我們不用retain而要用assign呢?
原因就是在于iOS的reference counting的環境中,我們必須解決circular count的問題。
(循環計數)assign 防止循環引用
- 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
- 關于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 是內容拷貝
- 下面關于線程管理錯誤的是()
正確答案: 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];
- 在沒有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: 創建對私有方法的前向引用
- iOS中的數據持久化方式()
正確答案: D
A: 屬性列表
B: 對象歸檔
C: SQLite和CoreData
D: 以上全部
- 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)
- 以下哪一段代碼不會拋出異常()
正確答案: 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:數組下標越界,運行時崩潰
- delegate中的property使用以下哪個屬性()
正確答案: A
A:assign
B:retain
C:copy
D:strong
delegate中文叫做委托,通常會用在class內部把一些事件處理”委托”給別人去完成。
為什么我們不用retain而要用assign呢?
原因就是在于iOS的reference counting的環境中,我們必須解決circular count的問題。
(循環計數)assign 防止循環引用
- 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
- 關于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 是內容拷貝
- 下面關于線程管理錯誤的是()
正確答案: 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];
- 在沒有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: 創建對私有方法的前向引用
- iOS中的數據持久化方式()
正確答案: D 你的答案: D (正確)
A: 屬性列表
B: 對象歸檔
C:SQLite和CoreData
D: 以上全部
- 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的中。