牛客網(wǎng) iOS 題 42-65
42.在移動端瀏覽器讽营,頁面采用 click 時間虎忌,會存在300ms 延遲:
主要原因:瀏覽器需要等待一段時間來判斷是不是雙擊(double tap)
43.混合應(yīng)用(Hybird App)
混合應(yīng)用是在 Native App 上結(jié)合 Web View 來加載 Web 資源的 App,即在 native 中提供一個容器橱鹏,用來加載 h5:
優(yōu)勢:兼容性良好膜蠢,成本低堪藐,更新快
劣勢:性能相對較差,用戶體驗差
44.以下代碼錯誤的地方
NSTimer *myTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(doSomeThing:) userInfo:nil repeats:YES];
[MyTimer fire];
創(chuàng)建 NSTimer 方法主要分為兩個類型
1.已經(jīng)包含了創(chuàng)建與運行方法:
scheduledTimerWithTimeInterval
2.需要在創(chuàng)建后手動添加進 Runloop:
NsTimer *timer1 = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(timeMethod:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer1 forMode:NSDefaultRunLoopMode];
45.什么情況下使用 weak 關(guān)鍵字挑围,相比 assign 有什么不同礁竞?
- 在 ARC 中,在有可能出現(xiàn)循環(huán)引用時杉辙,往往要通過讓其中一端使用 weak 來解決模捂,比如:delegate 代理屬性
- 自身對它進行一次強引用,沒有必要再強引用一次蜘矢,也會使用 weak狂男;
不同點:
assign 可以用于非 OC 對象,weak 必須用于 OC 對象
- weak 指示符該屬性對被賦值對象持有弱引用品腹,弱引用的意思是:即使該弱引用指向被賦值的對象岖食,該對象也可能被回收。
- assign: 簡單賦值珍昨,不更改索引計數(shù)(Reference Counting)。適用于基礎(chǔ)類型(簡單類型句喷,原子類型):NSInteger,CGPoint,CGFloat,C數(shù)據(jù)類型(int,float,double,char等)镣典。
46.卡頓(特指不流暢的的動畫),是 App 開發(fā)中最為常見的性能問題表現(xiàn)唾琼,在 iOS 中
發(fā)生機理:
- 網(wǎng)絡(luò)不暢通兄春,需要加載網(wǎng)絡(luò)資源的時候卡頓;
- 線程阻塞锡溯,例如網(wǎng)絡(luò)請求放在主線程中赶舆;
- 一次性在內(nèi)存中加載過多的 UI 控件。
優(yōu)化思路:
- 耗時較大的操作祭饭,例如網(wǎng)絡(luò)請求芜茵,放到子線程中,主線程盡量只放些 UI 控件
- 減少布局復(fù)雜度
47.站在 App 設(shè)計和研發(fā)的角度倡蝙,提出你對不同系統(tǒng)九串,不同品牌,不同機型的設(shè)備適配問題的對策寺鸥。
自由發(fā)揮
48.由于 App 啟動環(huán)節(jié)的感受對用戶體驗影響較大猪钮,我們需要在 App 優(yōu)化中側(cè)重優(yōu)化啟動體驗。請列舉一些導(dǎo)致【App 啟動慢】感受的典型問題或負面模式(Anti-Pattern)及相應(yīng)的優(yōu)化策略胆建。
emmmm
49.與 alloc 相反烤低,retain 相反,alloc 配對使用的分別是哪些方法笆载?
- dealloc release dealloc
- dealloc release release
- dealloc dealloc dealloc
- release release release
答案:<font color=“LightYellow”>2</font>
alloc 初始化會使對象的 retainCount = 1扑馁,所以配對是 realease涯呻;
retain 增加引用計數(shù),release 減小引用計數(shù)檐蚜;
50.需要調(diào)用 setName 方法需要使用哪個語句魄懂?
setName(@"obj")
name = @"object"
self.name = @"object"
答案:<font color=“LightYellow”>3</font>
OC語言在聲明對象的時候自動封裝了 setter 和 getter 方法,調(diào)用方式一般為:
[self setName:@"obj"];
self.name = @"obj";
(點語法)
51.關(guān)于 NSOperation queue 的說法闯第,正確的是市栗?
- 主要用于多線程并發(fā)處理
- 它是一個隊列,有嚴格的先進先出
- 它不會遵守嚴格的先進先出
- 可以通過調(diào)整權(quán)重開調(diào)整隊列的執(zhí)行順序
答案:<font color=“LightYellow”>1咳短,3填帽,4</font>
NSOPerationQueue會根據(jù)Operation的狀態(tài)(是否Ready)以及優(yōu)先級來確定執(zhí)行的NSOperation的順序
52.為什么說 Objective-C 是 runtime language?
- 將數(shù)據(jù)類型的確定有編譯時咙好,推遲到了運行時
- 運行時機制使我們直到運行時才去決定一個對象的類別篡腌,以及調(diào)用該類別對象指定方法
- 假設(shè) A 繼承了 B 類,那么在編譯時就已經(jīng)生成了 A 的實例
- 多態(tài)是指不同對象以自己的方式響應(yīng)相同的消息的能力
答案:<font color=“LightYellow”>1勾效,2嘹悼,4</font>
運行時機制使我們直到運行時才去決定一個對象的類別,以及調(diào)用該類別對象指定方法层宫,是多態(tài)的基礎(chǔ)杨伙。
實例的生成需要開辟空間,所以是在運行期生成
53.下列說法萌腿,正確的是限匣?
- category 可以在不獲悉,不改變原來代碼的情況下往里面添加新方法毁菱,只能添加米死,不能刪除修改
- implement 可以增加,修改或刪除方法贮庞,并且可以增加屬性
- extensions 可以添加屬性
- extensions 可以添加方法而不用實現(xiàn)
答案:<font color=“LightYellow”>1峦筒,3</font>
繼承(inherit)可以增加,修改或刪除方法窗慎,并且可以增加屬性
extensions 添加的方法必須在被拓展的類的實現(xiàn)文件中實現(xiàn)
54.關(guān)于淺復(fù)制和深復(fù)制勘天,下列說法正確的是
- 淺層復(fù)制:只復(fù)制引用對象的指針,而不復(fù)制引用對象本身捉邢;
- 深層復(fù)制:復(fù)制引用對象本身
- 如果是淺復(fù)制脯丝,修改一個對象可能會影響另一個對象;
- 如果是深復(fù)制伏伐,修改一個對象不會影響另外一個對象宠进;
答案:<font color=“LightYellow”>1,2藐翎,3材蹬,4</font>
55.下列程序輸出的是
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]);
- 2实幕,3,1
- 3堤器,2昆庇,1
- 1,2闸溃,3
- -1整吆,-1,-1
答案:<font color=“LightYellow”>4</font>
在 MRC 模式下辉川,NSString依然不能手動分配內(nèi)存表蝙,在 OC 中系統(tǒng)有對其特殊的處理方式
56.關(guān)于內(nèi)存管理,下列說法中錯誤的是
- 誰申請乓旗,誰釋放
- 內(nèi)存管理主要要避免“過早釋放”和“內(nèi)存泄露”府蛇,對于“過早釋放”需要注意@property 設(shè)置特性時,一定要對特性關(guān)鍵字屿愚,對于“內(nèi)存泄漏”汇跨,一定要申請了要負責(zé)釋放
- 關(guān)鍵字 alloc 或 new 生成的對象可以自動釋放
- 設(shè)置正確的 property 屬性,對于 retain 需要在合適的地方釋放
答案:<font color=“LightYellow”>3</font>
alloc 和 new 生成的對象不會自動釋放妆距,要自動釋放需要調(diào)用 autorelease 方法穷遂。
57.關(guān)于 readwrite,readonly毅厚,assign塞颁,automatic 的說法浦箱,下列說法錯誤的是
- readwrite 是可讀可寫特性吸耿,會同時生成 getter 和 setter 方法;
- readonly 是只讀特性酷窥,只會生成 getter 方法咽安;
- assign 是賦值屬性,setter 方法將傳入?yún)?shù)賦值給實例變量蓬推;
- nonatomic 是非原子操作妆棒,決定編譯器生成的 setter 和 getter 方法是否原子操作;并表示多線程安全沸伏;一般使用 atomic糕珊;
答案:<font color=“LightYellow”>4</font>
atomic 才是線程安全的,但是更耗費性能毅糟,一般常用的是 nonatomic红选。
58.以下說法正確的是
- Objective-C 支持多重繼承
- Objective-C 中的類可以實現(xiàn)多個接口
- Objective-C 中導(dǎo)入頭文件用的是 #include
- @class 用于注入對象
答案:<font color=“LightYellow”>2</font>
OC 只支持單一繼承,但是可以利用協(xié)議代理的方法實現(xiàn)多個協(xié)議和接口姆另;
導(dǎo)入文件使用 #import喇肋,可以避免重復(fù)導(dǎo)入坟乾;
@class 用于前向聲明
59.在 UIViewController 類中與模態(tài)相關(guān)方法有哪些?
presentViewController: animated:completion
dismissViewControllerAnimated:completion:
addChildViewController:
removeFromParentViewController
答案:<font color=“LightYellow”>1蝶防,2</font>
iOS 中的模態(tài)視圖(Modal View):一般帶有一個完成鍵和取消鍵甚侣,例如警告框
60.iOS 中導(dǎo)航設(shè)計模式有:
- 平鋪導(dǎo)航 UITabbarController
- 標簽導(dǎo)航 UINavigationController
- 樹形導(dǎo)航 UIPageViewController
61.下面與導(dǎo)航相關(guān)的視圖控制器有
- UIViewController
- UINavigationController
- UITabBarController
- UITableViewController
答案:<font color=“LightYellow”>1,2间学,3</font>
UIViewController 是 UINavigationController 和 UITabBarController 的父類
62.平鋪導(dǎo)航模式是在內(nèi)容組織上沒有層次關(guān)系殷费,展示的內(nèi)容都放置在一個主屏幕上,采用分屏或者分頁控制器進行導(dǎo)航菱鸥,可以左右或者上下滑動屏幕查看內(nèi)容宗兼。
- 對
- 錯
答案:<font color=“LightYellow”>1</font>
平鋪導(dǎo)航模式是指內(nèi)容間沒有從屬關(guān)系
63.標簽導(dǎo)航模式是在內(nèi)容被分成幾個功能模塊,每個功能模塊之間沒有什么關(guān)系氮采。通過標簽管理各個功能模塊殷绍,點擊標簽切換功能模塊。
- 對
- 錯
答案:<font color=“LightYellow”>1</font>
64.樹形導(dǎo)航模式是在內(nèi)容有層次的鹊漠,從上到下細分或者分類包含等關(guān)系主到,例如黑龍江省與哈爾濱的關(guān)系,黑龍江省包含了哈爾濱躯概,哈爾濱又包含了道里區(qū)登钥、道外區(qū)等。
- 對
- 錯
答案:<font color=“LightYellow”>1</font>
65.模態(tài)視圖是在導(dǎo)航過程中娶靡,有的時候需要放棄主要任務(wù)轉(zhuǎn)而做其他次要任務(wù)牧牢,完成次要任務(wù)后要再回到主要任務(wù),這個次要任務(wù)就是在“模態(tài)視圖”中完成的姿锭。
- 對
- 錯
答案:<font color=“LightYellow”>1</font>