iOS 選擇題(I)

1. 下面關(guān)于#import和#include的描述正確的是()

A. #import 是 #include 的替代指令瘪菌,防止重復(fù)引用
B. #import 和 #include 不可以混合使用
C. #import 只用于引用 Objective-C的文件狼速, #include 只用于引用C和C++的文件
D. #import 和 #include 的使用效果完全相同

Key: A
解析:#include和#import都可以用在ObjC程序中導(dǎo)入頭文件斤贰,但是#include是C中的初烘。
在C中罢绽,當(dāng)多個(gè)文件都導(dǎo)入了同一個(gè)頭文件時(shí)师逸,需要按如下方式進(jìn)行定義:

#ifndef HelloObjective_C_Header_h
#define HelloObjective_C_Header_h
 
#endif

這樣才能避免一個(gè)文件中重復(fù)導(dǎo)入一個(gè)頭文件津滞,造成程序效率低下寓调。
#import是Objective-C才有的锌唾,跟#include導(dǎo)入頭文件的差別在于通過(guò)#import導(dǎo)入頭文件時(shí)會(huì)自動(dòng)判斷頭文件是否已經(jīng)被導(dǎo)入過(guò),不必要像C中一樣還要進(jìn)行宏判斷來(lái)確認(rèn)是否已經(jīng)被導(dǎo)入過(guò)夺英!


2. 下面那個(gè)方法可以比較兩個(gè)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;

key: B
解析:== :比較的是指針指向的地址晌涕,OC中的對(duì)象都是用指針表示的
?? isEqual:返回一個(gè)bool值判斷兩個(gè)對(duì)象是否相等
?? isEqualToString:返回一個(gè)bool值判斷給出的字符串是否與已有的Unicode字符相同


3.Objective-C有私有方法嗎?有私有變量嗎痛悯?()

A. 有私有方法和私有變量
B. 沒(méi)有私有方法, 也沒(méi)有私有變量
C. 沒(méi)有私有方法余黎,有私有變量
D. 有私有方法,沒(méi)有私有變量

Key: B
解析:私有變量的定義類(lèi)似私有方法载萌,但是在 Objective-C 中惧财,仍然可以通過(guò) runtime 來(lái)實(shí)現(xiàn)對(duì)私有變量的訪問(wèn)。


4. 下面關(guān)于線(xiàn)程管理錯(cuò)誤的是()

A. GCD所用的開(kāi)銷(xiāo)要比NSThread大
B. 可以在子線(xiàn)程中修改UI元素
C. NSOperationQueue是比NSthread更高層的封裝
D. GCD可以根據(jù)不同優(yōu)先級(jí)分配線(xiàn)程

Key: B


5. 下面代碼的作用是讓doSomeThing函數(shù)每隔1秒被調(diào)用1次扭仁。請(qǐng)問(wèn)哪里有問(wèn)題()

NSTimer *myTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(doSomeThing:) userInfo:nil repeats:YES];

[myTimer fire]
A. 沒(méi)有將timer加入runloop
B. doSomeThing缺少參數(shù)
C. 忘記傳遞數(shù)據(jù)給userInfo
D. myTimer對(duì)象未通過(guò)[[myTimer alloc] init]方法初始化

Key: A
解析:NSTimer有兩個(gè)常用的方法:

//創(chuàng)建一個(gè)計(jì)時(shí)器可缚,參數(shù)1:時(shí)間間隔(秒),參數(shù)2:表示發(fā)送的對(duì)象(一般填self)斋枢,參數(shù)3:要執(zhí)行的方法帘靡,參數(shù)4:傳遞信息(可以以字典的形式,將信息傳遞給要執(zhí)行的方法)瓤帚,參數(shù)5:是否重復(fù)執(zhí)行描姚,如果NO,timer執(zhí)行一次后便失效戈次。
+(NSTimer *) timerWithTimeInterval:(NSTimerInterval *) ti target:(id)aTarget selector:(SEL) aSelector  userInfo:(id)userInfo repeats:(Bool) yesOrNo;

//創(chuàng)建一個(gè)計(jì)時(shí)器轩勘,參數(shù)1:時(shí)間間隔(秒),參數(shù)2:表示發(fā)送的對(duì)象(一般填self)怯邪,參數(shù)3:要執(zhí)行的方法绊寻,參數(shù)4:傳遞信息(可以以字典的形式,將信息傳遞給要執(zhí)行的方法),參數(shù)5:是否重復(fù)執(zhí)行澄步,如果NO冰蘑,timer執(zhí)行一次后便失效。
+(NSTimer *)scheduledTimerWithTimeInterval:(NSTimerInterval *)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(Bool)yesOrNo;

兩者區(qū)別:scheduledTimerWithTimeInterval方法創(chuàng)建完timer之后村缸,會(huì)自動(dòng)以NSDefaultRunLoopModel模式加入運(yùn)行循環(huán)祠肥。而timerWithTimeInterval方法創(chuàng)建的timer,不會(huì)自動(dòng)加入運(yùn)行循環(huán)梯皿,需要我們手動(dòng)指定模式仇箱,并手動(dòng)加入運(yùn)行循環(huán)。

//監(jiān)聽(tīng)用戶(hù)最基本的操作(觸摸东羹、點(diǎn)擊等)
FOUNDATION_EXPORT NSRunLoopMode const NSDefaultRunLoopMode;
//監(jiān)聽(tīng)一些特殊操作剂桥,滾動(dòng)等;
FOUNDATION_EXPORT NSRunLoopMode const NSRunLoopCommonModes

//在sheduledTimerWithTimeInterval方法中默認(rèn)的是NSDefaultRunLoopModel模式属提,而timerWithTimeInterval是可以指定這兩種模式的渊额。

NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(run) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    
- (void) run {
    NSLog(@"---跑了,跳了@萋!旬迹!");
}

參考:NSTimer的基本使用


UI 選擇題

. UIViewController在顯示過(guò)程中,各個(gè)方法的調(diào)用順序是()

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

Key: A
解析:

[ViewController initWithCoder:]或[ViewController initWithNibName:Bundle]: 首先從歸檔文件中加載UIViewController對(duì)象求类。即使是純代碼奔垦,也會(huì)把nil作為參數(shù)傳給后者。

[UIView awakeFromNib]: 作為第一個(gè)方法的助手尸疆,方法處理一些額外的設(shè)置椿猎。

[ViewController loadView]:創(chuàng)建或加載一個(gè)view并把它賦值給UIViewController的view屬性。

-[ViewController viewDidLoad]: 此時(shí)整個(gè)視圖層次(view hierarchy)已經(jīng)放到內(nèi)存中寿弱,可以移除一些視圖犯眠,修改約束,加載數(shù)據(jù)等症革。

[ViewController viewWillAppear:]: 視圖加載完成筐咧,并即將顯示在屏幕上。還沒(méi)設(shè)置動(dòng)畫(huà)噪矛,可以改變當(dāng)前屏幕方向或狀態(tài)欄的風(fēng)格等量蕊。

[ViewController viewWillLayoutSubviews]即將開(kāi)始子視圖位置布局

[ViewController viewDidLayoutSubviews]用于通知視圖的位置布局已經(jīng)完成

[ViewController viewDidAppear:]:視圖已經(jīng)展示在屏幕上,可以對(duì)視圖做一些關(guān)于展示效果方面的修改艇挨。

[ViewController viewWillDisappear:]:視圖即將消失

[ViewController viewDidDisappear:]:視圖已經(jīng)消失

[ViewController dealloc:]:視圖銷(xiāo)毀的時(shí)候調(diào)用


. 使用imageNamed方法創(chuàng)建UIImage對(duì)象時(shí)残炮,與普通的init方法有什么區(qū)別()

A. 沒(méi)有區(qū)別,只是為了方便
B. imageNamed方法只是創(chuàng)建了一個(gè)指針缩滨,沒(méi)有分配其他內(nèi)存
C. imageNamed方法將圖片加載到內(nèi)存中后不再釋放
D. imageNamed方法將使用完圖片后立即釋放

Key: C
解析:

imageNamed是會(huì)把讀取到的image存在某個(gè)緩存里面势就,第二次讀取相同圖片的話(huà)系統(tǒng)就會(huì)直接從那個(gè)緩存中獲取泉瞻,從某種意義上好像一種優(yōu)化,但是imageNamed讀取到的那個(gè)圖片似乎不會(huì)因?yàn)镸emory Warning而釋放苞冯,所以用這個(gè)會(huì)導(dǎo)致在內(nèi)存不足的時(shí)候閃退袖牙。簡(jiǎn)單的說(shuō)imageNamed采用了緩存機(jī)制,如果緩存中已加載了圖片抱完,直接從緩存讀就行了贼陶,每次就不用再去讀文件了刃泡,效率會(huì)更高 巧娱。


.什么是key window()

A. App中唯一的那個(gè)UIWindow對(duì)象
B. 可以指定一個(gè)key的UIWindow
C. 可接收到鍵盤(pán)輸入等事件的UIWindow
D. 不可以隱藏的那個(gè)UIWindow對(duì)象

Key: C
解析:

keyWindow的存在的意義,其實(shí)就是為了說(shuō)明當(dāng)前的window接管了這個(gè)控制器的view而已烘贴,你可以在keyWindow上加載你自己的建立的view了禁添。

. 模態(tài)視圖專(zhuān)用屬性有哪些()

A UIModalPresentationFullScreen,全屏狀態(tài)桨踪,是默認(rèn)呈現(xiàn)樣式老翘,iPhone只能全屏呈現(xiàn)。
B UIModalPresentationPageSheet锻离,它的寬度是固定的768點(diǎn)铺峭,在iPad豎屏情況下則全屏呈現(xiàn)。
C UIModalPresentationFormSheet汽纠,它的是固定的540x620點(diǎn)卫键,無(wú)論是橫屏還是豎屏情況下呈現(xiàn)尺寸都不會(huì)變化。
D UIModalPresentationCurrentContext虱朵,它與父視圖控制器有相同的呈現(xiàn)方式莉炉。

key: A、B碴犬、C絮宁、D

9.關(guān)于NSOperation queue的說(shuō)法,正確的是 ()

A 主要用于多線(xiàn)程并發(fā)處理
B 它是一個(gè)隊(duì)列服协,有嚴(yán)格的先進(jìn)先出
C 它不會(huì)遵守嚴(yán)格的先進(jìn)先出
D NSOperationQueue可以通過(guò)調(diào)整權(quán)重來(lái)調(diào)整隊(duì)列的執(zhí)行順序

key: A C D
解析:

首先NSOperationQueue是屬于多線(xiàn)程并發(fā)處理這一部分绍昂,它主要用來(lái)提供一個(gè)可添加的操作隊(duì)列,將一系列操作添加到隊(duì)列中偿荷,然后根據(jù)操作的優(yōu)先級(jí)和內(nèi)部操作依賴(lài)來(lái)決定操作執(zhí)行的順序治专。高優(yōu)先級(jí)的操作先于低優(yōu)先級(jí)執(zhí)行。一個(gè)操作所依賴(lài)的操作全部執(zhí)行完畢后才能執(zhí)行遭顶。所以A,C,D正確

10. 下列程序輸出是()

NSMutableArray* ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"];
[str retain];
[ary addObject:str];
NSLog(@"%@%d",str,[str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%@%d",str,[str retainCount]);
[ary removeAllObjects];
NSLog(@"%@%d",str,[str retainCount]);

key: -1, -1, -1
解析:

今天在看書(shū)上的一段代碼時(shí)张峰,發(fā)現(xiàn)NSString實(shí)例化時(shí),有時(shí)用的是initWithFormat方法棒旗,有時(shí)用的是stringWithFormat喘批,到底應(yīng)該如何選擇呢撩荣?

區(qū)別:
① initWithFormat是實(shí)例方法
只能通過(guò) NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 調(diào)用,但是必須手動(dòng)release來(lái)釋放內(nèi)存資源
② stringWithFormat是類(lèi)方法
可以直接用 NSString* str = [NSString stringWithFormat:@"%@",@"Hello World"] 調(diào)用饶深,內(nèi)存管理上是autorelease的餐曹,不用手動(dòng)顯式release。


RunLoop相關(guān)

.NSRunLoop的以下描述錯(cuò)誤的是()

A Runloop并不是由系統(tǒng)自動(dòng)控制的
B 有3類(lèi)對(duì)象可以被run loop監(jiān)控:sources敌厘,timers台猴,observers
C 線(xiàn)程是默認(rèn)啟動(dòng)run loop的
D NSTimer可手動(dòng)添加到新建的NSRunLoop中

key: C
解析:

A:Runloop的作用在于當(dāng)有事情要做時(shí)它使當(dāng)前的thread工作,沒(méi)有事情做時(shí)又使thread 休眠sleep俱两。Runloop并不是由系統(tǒng)自動(dòng)控制的饱狂,尤其是對(duì)那些新建的次線(xiàn)程需要對(duì)其進(jìn)行顯示的控制。

B:有3類(lèi)對(duì)象可以被run loop監(jiān)控:sources宪彩、timers休讳、observers。當(dāng)這些對(duì)象需要處理的時(shí)候尿孔,為了接收回調(diào)俊柔,首先必須通
過(guò) CFRunLoopAddSource ,CFRunLoopAddTimer 或者 CFRunLoopAddObserver 把這些對(duì)象放入run loop。 要停止接收它的回調(diào)活合,可以通過(guò)CFRunLoopRemoveSource從run loop中移除某個(gè)對(duì)象雏婶。

C:每一個(gè)線(xiàn)程都有自己的runloop, 主線(xiàn)程是默認(rèn)開(kāi)啟的,創(chuàng)建的子線(xiàn)程要手動(dòng)開(kāi)啟白指,因?yàn)镹SApplication 只啟動(dòng)main applicaiton thread留晚。

D:NSTimer默認(rèn)添加到當(dāng)前NSRunLoop中,也可以手動(dòng)制定添加到自己新建的NSRunLoop的中侵续。


.下面的一段代碼倔丈,打印值是()

NSString *str = @“l(fā)anou”;
[str retain];
NSLog(@“%lu”,str.retainCount);

A 1
B 2
C -1
D ULONG_MAX

key: D
解釋?zhuān)?/p>

這是一個(gè)放在常量區(qū)的字符串常量,返回的結(jié)果是UINT_MAX值


UITableView 相關(guān)

. 以下關(guān)于tableView編輯的方法中哪個(gè)不屬于代理方法()

A -(void)setEditing:(BOOL)editing animated:(BOOL)animated

B -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

C -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

D -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

key: A
解釋?zhuān)?/p>

A是tableView自己的方法状蜗,不是代理

下面哪些屬于UITableViewDelegate協(xié)議的方法()

A tableView:cellForRowAtIndexPath:
B tableView:numberOfRowsInSection:
C tableView:didSelectRowAtIndexPath:
D numberOfSectionsInTableView:

key: C
解析:

代理的作用是用來(lái)完成指定的某種動(dòng)作需五,所以必須是動(dòng)作性的操作而不是數(shù)據(jù)性的操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市轧坎,隨后出現(xiàn)的幾起案子宏邮,更是在濱河造成了極大的恐慌,老刑警劉巖缸血,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜜氨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捎泻,警方通過(guò)查閱死者的電腦和手機(jī)飒炎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笆豁,“玉大人郎汪,你說(shuō)我怎么就攤上這事赤赊。” “怎么了煞赢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵抛计,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我照筑,道長(zhǎng)吹截,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任凝危,我火速辦了婚禮波俄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘媒抠。我一直安慰自己弟断,他們只是感情好咏花,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布趴生。 她就那樣靜靜地躺著,像睡著了一般昏翰。 火紅的嫁衣襯著肌膚如雪苍匆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天棚菊,我揣著相機(jī)與錄音浸踩,去河邊找鬼。 笑死统求,一個(gè)胖子當(dāng)著我的面吹牛检碗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播码邻,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼折剃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了像屋?” 一聲冷哼從身側(cè)響起怕犁,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎己莺,沒(méi)想到半個(gè)月后奏甫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凌受,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年阵子,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胜蛉。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挠进,死狀恐怖智蝠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奈梳,我是刑警寧澤杈湾,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站攘须,受9級(jí)特大地震影響漆撞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜于宙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一浮驳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捞魁,春花似錦至会、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至柏卤,卻和暖如春缸夹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凑懂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工煤痕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人接谨。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓摆碉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脓豪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巷帝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容