10個Objective-C基礎面試題,iOS面試必備

2021-01-11 開源中國

蘋果的iOS系統越來越火了,蘋果這個金礦平臺也吸引了大量的iOS開發者參與其中,這也促使越來越多的公司向iOS應用開發方向靠攏,因此市場上 對iOS開發的人才需求自然也非常巨大。如果你準備去面試一個iOS開發崗位,那麼本文也許可以幫助你提前準備一些iOS面試題,這些面試題都是 Objective-C基礎面試題,一起來看看。

1、#import和#include的區別,@class代表什麼?

@class一般用於頭文件中需要聲明該類的某個實例變量的時候用到,在m文件中還是需要使用#import

而#import比起#include的好處就是不會引起重複包含

2、談談Object-C的內存管理方式及過程?

1.當你使用new,alloc和copy方法創建一個對象時,該對象的保留計數器值為1.當你不再使用該對象時,你要負責向該對象發送一條release或autorelease消息.這樣,該對象將在使用壽命結束時被銷毀.

2.當你通過任何其他方法獲得一個對象時,則假設該對象的保留計數器值為1,而且已經被設置為自動釋放,你不需要執行任何操作來確保該對象被清理.如果你打算在一段時間內擁有該對象,則需要保留它並確保在操作完成時釋放它.

3.如果你保留了某個對象,你需要(最終)釋放或自動釋放該對象.必須保持retain方法和release方法的使用次數相等.

3、Object-C有私有方法嗎?私有變量呢?

objective-c – 類裡面的方法只有兩種, 靜態方法和實例方法. 這似乎就不是完整的面向對象了,按照OO的原則就是一個對象只暴露有用的東西. 如果沒有了私有方法的話, 對於一些小範圍的代碼重用就不那麼順手了. 在類裡面聲名一個私有方法

@interface Controller : NSObject { NSString *something; }

+ (void)thisIsAStaticMethod;

– (void)thisIsAnInstanceMethod;

@end

@interface Controller (private) -

(void)thisIsAPrivateMethod;

@end

@private可以用來修飾私有變量

在Objective‐C中,所有實例變量默認都是私有的,所有實例方法默認都是公有的

4、Object-C有多繼承嗎?沒有的話用什麼代替?cocoa 中所有的類都是NSObject 的子類

多繼承在這裡是用protocol 委託代理 來實現的

你不用去考慮繁瑣的多繼承 ,虛基類的概念.

ood的多態特性 在 obj-c 中通過委託來實現.

5、內存管理 Autorelease、retain、copy、assign的set方法和含義?

1,你初始化(alloc/init)的對象,你需要釋放(release)它。例如:

NSMutableArray aArray = [[NSArray alloc] init]; 後,需要 [aArray release];

2,你retain或copy的,你需要釋放它。例如:

[aArray retain] 後,需要 [aArray release];

3,被傳遞(assign)的對象,你需要斟酌的retain和release。例如:

obj2 = [[obj1 someMethod] autorelease];

對象2接收對象1的一個自動釋放的值,或傳遞一個基本數據類型(NSInteger,NSString)時:你或希望將對象2進行retain,以防止它在被使用之前就被自動釋放掉。但是在retain後,一定要在適當的時候進行釋放。

關於索引計數(Reference Counting)的問題

retain值 = 索引計數(Reference Counting)

NSArray對象會retain(retain值加一)任何數組中的對象。當NSArray被卸載(dealloc)的時候,所有數組中的對象會 被 執行一次釋放(retain值減一)。不僅僅是NSArray,任何收集類(Collection Classes)都執行類似操作。例如 NSDictionary,甚至UINavigationController。

Alloc/init建立的對象,索引計數為1。無需將其再次retain。

[NSArray array]和[NSDate date]等「方法」建立一個索引計數為1的對象,但是也是一個自動釋放對象。所以是本地臨時對象,那麼無所謂了。如果是打算在全Class中使用的變量(iVar),則必須retain它。

預設的類方法返回值都被執行了「自動釋放」方法。(*如上中的NSArray)

在類中的卸載方法「dealloc」中,release所有未被平衡的NS對象。(*所有未被autorelease,而retain值為1的)

6、淺拷貝和深拷貝區別是什麼

簡單的來說就是,在有指針的情況下,淺拷貝只是增加了一個指針指向已經存在的內存,而深拷貝就是增加一個指針並且申請一個新的內存,使這個增加的指針指向這個新的內存,採用深拷貝的情況下,釋放內存的時候就不會出現在淺拷貝時重複釋放同一內存的錯誤

7、C和obj-c 如何混用

1)obj-c的編譯器處理後綴為m的文件時,可以識別obj-c和c的代碼,處理mm文件可以識別obj-c,c,c++代碼,但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現obj-c的代碼,因為cpp只是cpp

2)在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問題

3)在cpp中混用obj-c其實就是使用obj-c編寫的模塊是我們想要的。

如果模塊以類實現,那麼要按照cpp class的標準寫類的定義,頭文件中不能出現obj-c的東西,包括#import cocoa的。實現文件中,即類的實現代碼中可以使用obj-c的東西,可以import,只是後綴是mm。

如果模塊以函數實現,那麼頭文件要按c的格式聲明函數,實現文件中,c++函數內部可以用obj-c,但後綴還是mm或m。

總結:只要cpp文件和cpp include的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關鍵是使用接口,而不能直接使用 實現代 碼,實際上cpp混用的是obj-c編譯後的o文件,這個東西其實是無差別的,所以可以用。obj-c的編譯器支持cpp

8、Objective-C中類別和類擴展的區別。

答案:category和extensions的不同在於後者可以添加屬性。另外後者添加的方法是必須要實現的。

extensions可以認為是一個私有的Category。

9、我們說的Objective-C是動態運行時語言是什麼意思?

答案:多態。 主要是將數據類型的確定由編譯時,推遲到了運行時。

這個問題其實淺涉及到兩個概念,運行時和多態。

簡單來說,運行時機制使我們直到運行時才去決定一個對象的類別,以及調用該類別對象指定方法。

多態:不同對象以自己的方式響應相同的消息的能力叫做多態。意思就是假設生物類(life)都用有一個相同的方法-eat;

那人類屬於生物,豬也屬於生物,都繼承了life後,實現各自的eat,但是調用是我們只需調用各自的eat方法。

也就是不同的對象以自己的方式響應了相同的消息(響應了eat這個選擇器)。

因此也可以說,運行時機制是多態的基礎?

10、Objective-C堆和棧的區別?

管理方式:對於棧來講,是由編譯器自動管理,無需我們手工控制;對於堆來說,釋放工作由程式設計師控制,容易產生memory leak。

申請大小:

棧:在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在 WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因 此,能從棧獲得的空間較小。

堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是由於系統是用鍊表來存儲的空閒內存地址的,自然是不連續的,而鍊表的遍歷方向是由低地址向高地址。堆的大小受限於計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。

碎片問題:對於堆來講,頻繁的new/delete勢必會造成內存空間的不連續,從而造成大量的碎片,使程序效率降低。對於棧來講,則不會存在這個問題,因為棧是先進後出的隊列,他們是如此的一一對應,以至於永遠都不可能有一個內存塊從棧中間彈出

分配方式:堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變量的分配。動態分配由alloca函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。

分配效率:棧是機器系統提供的數據結構,計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高。堆則是C/C++函數庫提供的,它的機制是很複雜的。

以上就是10個面試者經常會碰到的Objective-C基礎面試題,如果你正好要去應聘iOS崗位那麼請回到文章開始重新認真閱讀吧。iOS開發還是相對比較有前途的,大家覺得呢?

相關焦點

  • Objective-C 和 Swift 面試題
    現在的面試中,傳統大廠如BAT對 Objective-C 的語言進行較多考察,日常開發也是以 Objective-C為主。而因為 Swift 的高歌猛進,我們日後會看到關於 Swift 的問題越來越多。本文收錄總結了常見的 Swift 和 Objective-C 的面試題,希望對大家有所幫助。
  • iOS 面試之道:117 道 iOS 面試題全解析
    今年四月份,道長從美國回來在北京組織了個 iOS 技術大佬面基聚餐,第一次見到道長、巧哥、星宇、孤城、念茜女神、戴銘哥、南峰子等等大佬們,跟道長的這次聚會後我才回去規劃小書的。《iOS 面試之道》分為三個部分,其中面試準備部分由唐巧老師創作,算法和 iOS 專業問答部分則是故胤道長完成,全書通過 117 道 iOS 面試題全解析系統的整理了 iOS
  • C語言面試54題
    C語言面試54題大家好,這期呢,我們談一下c語言的面試題。
  • 10個經典的 Java main 方法面試題
    以下是筆者認為比較經典的關於Java main方法的面試題,與其說是Java面試題,其實也是Java的一些最基礎知識問題,分享給大家,如有錯誤,請指出。1.不用main方法如何定義一個類?10.我們能否在Java中同步main方法?是的,main方法可以在Java中同步,synchronized修飾符允許用於main方法的聲明中,這樣就可以在Java中同步main方法了。
  • 【別笑】手撕吊打面試官系列面試題
    必備面試題js基礎1.用js列印一個乘法表這一題面試官考察的是你關於js的列印相關基礎api的熟悉程度,以及基本的數學常識,送分題console.log(`1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=16
  • 免費送大廠必備面試題,拒絕套路
    但無論是想要跳槽或晉升讓薪資翻倍,還是會遇到各種各樣的面試。最近Debug整理了一套「2020年程式設計師面試必備題」,現免費分享給大家。內容共有30章,從Java基礎到框架JVM,附帶答案……讓你去面試時就十拿九穩!
  • 英文面試不敢說?面試10個經典案例及標準回答無償分享(內附面試課程)
    面試的真實案例看得不少了,怎麼一到面試官面前就緊張得說不出話,紙上談兵總是不夠穩,試試阿卡索職場面試課程,真人外教一對一在線教學,實戰模擬真實面試
  • iOS 開發面試通關指南:67 個必知問題!
    差不多雙方都需要為面試做準備,我希望這篇文章能夠幫你在將來的面試中準備地更加充分一些。問題一條簡短的提示:我是不會提供這些問題的完整答案的(只有一些我個人預期你至少應該了解的基礎),因為我認為,如果你自己去尋找答案,應該能準備得更好。閱讀有關特定主題的文章會是一個不錯的選擇,可以為你提供更多信息,從而助你在面試中發揮得更好。
  • JavaScript面試的10個經典面試題
    JavaScript面試的10個經典面試題 工程師3 發表於 2018-04-20 15:50:00 對大部分公司來說,招聘技術人員這種事情,管理層就應該放手交給技術團隊,只有他們才能夠準確地判斷應聘者的技術實力
  • 程式設計師必備的app推薦:提升技術,面試,記錄總結的平臺
    可以下載自己喜歡的視頻,學習成長。慕課網現在也有社區,可以在社區發表動態,相互交流。第二款:CSDNcsdn:是一個技術分享,記錄平臺。程式設計師的聚集地:前端,後臺,移動端。平臺內容包括:移動端,前端技術,資料庫,研發工具等等知識豐富。可以建立自己的博客,分享和記錄自己技術成長經歷。
  • 關於面試總結13-app測試面試題
    前言現在面試個測試崗位,都是要求全能的,web、接口、app啥都要會測,那麼APP測試一般需要哪些技能呢?
  • 一道Block面試題的深入挖掘
    序言最近看到了一道Block的面試題,還蠻有意思的,來給大家分享一下。本文從一道Block面試題出發,層層深入到達Block原理的講解,把面試題吃得透透的。題外話:很多人覺得Block的定義很怪異,很難記住。但其實和C語言的函數指針的定義對比一下,你很容易就可以記住。
  • 500道Java 必備面試題答案(過後即刪)
    其實,很多面試者在搜集面試資料的時候都踩過一些「坑」,你是不是也遇到過:免費搜索的面試題,內容不全面,這就算了,有時候答案都不準確;很多培訓機構提供的面試寶典內容雖然不少,但深度不夠,且面試題過於老舊脫離了企業實際需要;還有很多付費的面試題存在濫竽充數,提供了很多沒有價值的面試題,錢花了,乾貨沒學到;
  • 【國考面試】2020年國考稅務系統面試題(6月22日)
    【國考面試】2020年國考稅務系統面試題(6月22日)由國家公務員考試網面試試題欄目由提供,更多關於2020年國考稅務系統面試題,國考面試真題,國家公務員考試面試試題的內容,請關注國家公務員考試網/廣東公務員考試網!
  • 公務員面試、事業單位面試幾類熱點題,是基礎知識,可支撐許多題
    這道題是比較有實用價值的,因為可以用它來回答關於政治意識、以及敏銳性、堅定性等等問題。在中央黨校青年幹部培訓班上,主要領導又明確提出了青年幹部要有的七種能力,這其中,第一位的就是政治能力。所以,我個人預測,關於政治方面的面試題一定會是越來越多的出現的。今年以來,湖北、河北等地都已經直接地出這方面的面試題了,是個重要的趨勢開始。
  • 數據分析求職面試基礎考題,你是否都會了?附面試真題
    10個同學,有7個都想做Analytics相關的工作,但是很多同學都在面試時敗下陣來。
  • 電子工程師面試題
    (威盛筆試題c ircuit design-beijing-03.11.09)  25、To design a CMOS invertor with balance rise and fall time,please define th e ration of channel width of PMOS and NMOS and explain?
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • 長達兩個月的面經,50道python開發常見基礎面試題!
    轉眼已經5月份,學員們經過三金四銀求職季積累了大量的面經,在小U的反覆催促下終於讓python將這兩個月面試常見題整理下來,不要以為你記憶力很好,這道題太奇葩了你絕對不會忘,事實證明記憶力是靠不住,話不多說來看看學員們整理的python面試題!小U 還會不斷催促學員們將新遇到的問題記錄下來。
  • 2020Python常見面試題及答案-開課吧
    Python面試題【Python面試題】-iterable(可迭代對象)和iterator(迭代器)的區別?ps:他倆最大的區別就是,可迭代對象可以無限迭代,而迭代器只能迭代一次(是個數據流的形式!)。判斷迭代器 : isinstance([], Iterator)。判斷可迭代對象: isinstance([], Iterable)。【Python面試題】怎樣聲明多個變量並賦值?