對(duì)于要面試iOS開發(fā)的同學(xué)系草,可能已經(jīng)看了很多的面試題。但是網(wǎng)上很多的面試題有些很全唆涝,但是沒有重點(diǎn)悄但,有些又太少。今天小編給大家整理了一些比較重要和經(jīng)常問的面試題石抡,總共20個(gè)檐嚣,半小時(shí)之內(nèi)就可以看完。
1. Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Category是什么?重寫一個(gè)類的方式用繼承好還是分類好?為什么?
答: Object-c的類不可以多重繼承;可以實(shí)現(xiàn)多個(gè)接口啰扛,通過實(shí)現(xiàn)多個(gè)接口可以完成C++的多重繼承;Category是類別嚎京,一般情況用分類好,用Category去重寫類的方法隐解,僅對(duì)本Category有效鞍帝,不會(huì)影響到其他類與原有類的關(guān)系。
2. #import 跟#include 又什么區(qū)別煞茫,@class呢, #import<> 跟 #import””又什么區(qū)別?
答:#import是Objective-C導(dǎo)入頭文件的關(guān)鍵字帕涌,#include是C/C++導(dǎo)入頭文件的關(guān)鍵字,使用#import頭文件會(huì)自動(dòng)只導(dǎo)入一次,不會(huì)重復(fù)導(dǎo)入续徽,相當(dāng)于#include和#pragma once;@class告訴編譯器某個(gè)類的聲明蚓曼,當(dāng)執(zhí)行時(shí),才去查看類的實(shí)現(xiàn)文件钦扭,可以解決頭文件的相互包含;#import<>用來包含系統(tǒng)的頭文件纫版,#import””用來包含用戶頭文件。
3. 屬性readwrite客情,readonly其弊,assign,retain膀斋,copy梭伐,nonatomic 各是什么作用,在那種情況下用?
答:
1). readwrite 是可讀可寫特性;需要生成getter方法和setter方法時(shí)
2). readonly 是只讀特性 只會(huì)生成getter方法 不會(huì)生成setter方法 ;不希望屬性在類外改變
3). assign 是賦值特性仰担,setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí);
4). retain 表示持有特性糊识,setter方法將傳入?yún)?shù)先保留,再賦值惰匙,傳入?yún)?shù)的retaincount會(huì)+1;
5). copy 表示賦值特性技掏,setter方法將傳入對(duì)象復(fù)制一份;需要完全一份新的變量時(shí)。
6).nonatomic 非原子操作项鬼,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全劲阎,一般使用nonatomic
4.對(duì)于語句NSString*obj = [[NSData alloc] init]; obj在編譯時(shí)和運(yùn)行時(shí)分別時(shí)什么類型的對(duì)象?
答: 編譯時(shí)是NSString的類型;運(yùn)行時(shí)是NSData類型的對(duì)象
5.常見的object-c的數(shù)據(jù)類型有那些绘盟, 和C的基本數(shù)據(jù)類型有什么區(qū)別?如:NSInteger和int
答:object-c的數(shù)據(jù)類型有NSString,NSNumber,NSArray龄毡,NSMutableArray吠卷,NSData等等,這些都是class沦零,創(chuàng)建后便是對(duì)象祭隔,而C語言的基本數(shù)據(jù)類型int,只是一定字節(jié)的內(nèi)存空間路操,用于存放數(shù)值;NSInteger是基本數(shù)據(jù)類型疾渴,并不是NSNumber的子類,當(dāng)然也不是NSObject的子類屯仗。NSInteger是基本數(shù)據(jù)類型Int或者Long的別名(NSInteger的定義typedef long NSInteger)搞坝,它的區(qū)別在于,NSInteger會(huì)根據(jù)系統(tǒng)是32位還是64位來決定是本身是int還是Long魁袜。
6.id 聲明的對(duì)象有什么特性?
答:Id 聲明的對(duì)象具有運(yùn)行時(shí)的特性桩撮,即可以指向任意類型的objcetive-c的對(duì)象;
7. 原子(atomic)跟非原子(non-atomic)屬性有什么區(qū)別?
答:
1). atomic提供多線程安全。是防止在寫未完成的時(shí)候被另外一個(gè)線程讀取峰弹,造成數(shù)據(jù)錯(cuò)誤
2). non-atomic:在自己管理內(nèi)存的環(huán)境中店量,解析的訪問器保留并自動(dòng)釋放返回的值,如果指定了 nonatomic 鞠呈,那么訪問器只是簡單地返回這個(gè)值垫桂。
8. 內(nèi)存管理的幾條原則時(shí)什么?按照默認(rèn)法則.那些關(guān)鍵字生成的對(duì)象需要手動(dòng)釋放?在和property結(jié)合的時(shí)候怎樣有效的避免內(nèi)存泄露?
答:誰申請(qǐng),誰釋放
遵循Cocoa Touch的使用原則;
內(nèi)存管理主要要避免“過早釋放”和“內(nèi)存泄漏”粟按,對(duì)于“過早釋放”需要注意@property設(shè)置特性時(shí)诬滩,一定要用對(duì)特性關(guān)鍵字,對(duì)于“內(nèi)存泄漏”灭将,一定要申請(qǐng)了要負(fù)責(zé)釋放疼鸟,要細(xì)心。
關(guān)鍵字alloc 或new 生成的對(duì)象需要手動(dòng)釋放;
設(shè)置正確的property屬性庙曙,對(duì)于retain需要在合適的地方釋放空镜,
9.如何對(duì)iOS設(shè)備進(jìn)行性能測試?
答: Profile-> Instruments ->Time Profiler
10. Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代碼捌朴、方法又是什么?
答:線程創(chuàng)建有三種方法:使用NSThread創(chuàng)建吴攒、使用GCD的dispatch、使用子類化的NSOperation,然后將其加入NSOperationQueue;在主線程執(zhí)行代碼砂蔽,方法是performSelectorOnMainThread洼怔,如果想延時(shí)執(zhí)行代碼可以用performSelector:onThread:withObject:waitUntilDone:
11 淺復(fù)制和深復(fù)制的區(qū)別?
答:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔槪粡?fù)制引用對(duì)象本身左驾。
深層復(fù)制:復(fù)制引用對(duì)象本身镣隶。
意思就是說我有個(gè)A對(duì)象极谊,復(fù)制一份后得到A_copy對(duì)象后,對(duì)于淺復(fù)制來說安岂,A和A_copy指向的是同一個(gè)內(nèi)存資源轻猖,復(fù)制的只不過是是一個(gè)指針,對(duì)象本身資源
還是只有一份域那,那如果我們對(duì)A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對(duì)象同樣被修改咙边,這其實(shí)違背了我們復(fù)制拷貝的一個(gè)思想。深復(fù)制就好理解了,內(nèi)存中存在了
兩份獨(dú)立對(duì)象本身次员。
用網(wǎng)上一哥們通俗的話將就是:
淺復(fù)制好比你和你的影子败许,你完蛋,你的影子也完蛋
深復(fù)制好比你和你的克隆人翠肘,你完蛋檐束,你的克隆人還活著。
12. 類別的作用?繼承和類別在實(shí)現(xiàn)中有何區(qū)別?
答:category 可以在不獲悉束倍,不改變?cè)瓉泶a的情況下往里面添加新的方法被丧,只能添加,不能刪除修改绪妹,并且如果類別和原來類中的方法產(chǎn)生名稱沖突甥桂,則類別將覆蓋原來的方法,因?yàn)轭悇e具有更高的優(yōu)先級(jí)邮旷。
類別主要有3個(gè)作用:
1).將類的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)不同框架中黄选。
2).創(chuàng)建對(duì)私有方法的前向引用。
3).向?qū)ο筇砑臃钦絽f(xié)議婶肩。
繼承可以增加办陷,修改或者刪除方法,并且可以增加屬性律歼。
13. 類別和類擴(kuò)展的區(qū)別民镜。
答:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實(shí)現(xiàn)的险毁。
extensions可以認(rèn)為是一個(gè)私有的Category制圈。
14. 代理的作用?
答:代理的目的是改變或傳遞控制鏈。允許一個(gè)類在某些特定時(shí)刻通知到其他類畔况,而不需要獲取到那些類的指針鲸鹦。可以減少框架復(fù)雜度跷跪。
另外一點(diǎn)馋嗜,代理可以理解為java中的回調(diào)監(jiān)聽機(jī)制的一種類似。
15. oc中可修改和不可以修改類型域庇。
答:可修改不可修改的集合類嵌戈。這個(gè)我個(gè)人簡單理解就是可動(dòng)態(tài)添加修改和不可動(dòng)態(tài)添加修改一樣覆积。
比如NSArray和NSMutableArray听皿。前者在初始化后的內(nèi)存控件就是固定不可變的熟呛,后者可以添加等,可以動(dòng)態(tài)申請(qǐng)新的內(nèi)存空間尉姨。
16. OC的垃圾回收機(jī)制?
答: OC2.0有Garbage collection庵朝,但是iOS平臺(tái)不提供。
一般我們了解的objective-c對(duì)于內(nèi)存管理都是手動(dòng)操作的又厉,但是也有自動(dòng)釋放池九府。
但是差了大部分資料,貌似不要和arc機(jī)制搞混就好了覆致。
17. 什么是延遲加載?
答:懶漢模式侄旬,只在用到的時(shí)候才去初始化。
也可以理解成延時(shí)加載煌妈。
我覺得最好也最簡單的一個(gè)列子就是tableView中圖片的加載顯示了儡羔。
一個(gè)延時(shí)載,避免內(nèi)存過高璧诵,一個(gè)異步加載汰蜘,避免線程堵塞。
18. 什么時(shí)候使用NSMutableArray之宿,什么時(shí)候使用NSArray?
答:當(dāng)數(shù)組在程序運(yùn)行時(shí)族操,需要不斷變化的,使用NSMutableArray比被,當(dāng)數(shù)組在初始化后色难,便不再改變的,使用NSArray等缀。需要指出的是枷莉,使用NSArray只表明的是該數(shù)組在運(yùn)行時(shí)不發(fā)生改變,即不能往NSAarry的數(shù)組里新增和刪除元素项滑,但不表明其數(shù)組內(nèi)的元素的內(nèi)容不能發(fā)生改變依沮。NSArray是線程安全的,NSMutableArray不是線程安全的枪狂,多線程使用到NSMutableArray需要注意危喉。
19. 類NSObject的那些方法經(jīng)常被使用?
答:NSObject是Objetive-C的基類,其由NSObject類及一系列協(xié)議構(gòu)成州疾。
其中類方法alloc辜限、class、 description 對(duì)象方法init严蓖、dealloc薄嫡、– performSelector:withObject:afterDelay:等經(jīng)常被使用
20. 在iPhone應(yīng)用中如何保存數(shù)據(jù)?
答:有以下幾種保存機(jī)制:
1).通過web服務(wù)氧急,保存在服務(wù)器上
2).通過NSCoder固化機(jī)制,將對(duì)象保存在文件中
3).通過SQlite或CoreData保存在文件數(shù)據(jù)庫中
面試前看看面試題雖然能助你一臂之力毫深,但是最重要的還是平時(shí)要扎扎實(shí)實(shí)的提升自己的技術(shù)能力吩坝。小麥祝大家都能夠找到一個(gè)好的工作,對(duì)得起自己的努力哑蔫。
注:文章來源于網(wǎng)絡(luò)钉寝,如有侵權(quán),請(qǐng)聯(lián)系小編刪除闸迷。