iOS開發面試知識點總結

2021-07-23 21:31:41 字數 2009 閱讀 5885

這一段時間都在忙著面試相關的事情,今天面試的時候才發現有些自己以為很熟悉的點在真的去做筆試題和真的機試時都沒有做好,也許是從一開始就沒有理解清楚,所以現在準備好好的這一段時間遇到的容易在面試出現的問題都整理一下,也是自己成長的乙個過程。

1.objective-c的記憶體管理方式

oc使用物件的引用計數對記憶體進行管理。oc中每個物件都有乙個與之對應的整數,叫「引用計數器」,當乙個物件在建立之後它的引用計數器值加1,當呼叫這個物件的alloc、retain、new、copy方法之後引用計數器值自動在原來的基礎上加1,當呼叫這個物件的release方法之後它的引用計數器值減1,如果乙個物件的引用計數器值為0,則系統會自動呼叫這個物件的dealloc方法來銷毀這個物件。

2.copy、retain、assign、weak的set方法和含義

strong和retain的語義的set方法一樣,會是物件的引用計數增加

(void)setstongobj:(nsobject *)obj
weak和assign語義的set方法都是單純賦值,但是assign針對的是「純量型別」,weak一般使用的是物件型別,兩者的set方法一樣,但是weak會在物件遭到摧毀時,屬性值會置nil,不會產生野指標,使用比較安全。

(void)setstongobj:(nsobject *)obj
copy方法會拷貝乙個物件,一般用於nsstring,用於保護屬性的封裝:

3.delegate和block分別使用什麼記憶體語義,為什麼?

比如tableview的delegate,首先其中tableviewcontroller對tableview是擁有關係,設定**的時候會設定tableview.delegate = self,也就是說此刻的delegate就是tableviewcontroller本身,如果將**設定為strong或者retain這種擁有關係,那就是說此刻tableview對tableviewcontroller也是擁有關係,就會形成乙個引用環,造成記憶體洩漏,所以必須將delegate設定為非擁有關係。

delegate最重要的是表達非擁有關係,用assign和weak都可以,但是如上文所講,weak語義的屬性會在屬性遭到摧毀時,將屬性置nil,不會產生野指標,所以推薦使用weak。

block定義的時候,其所佔的記憶體是分配在棧上的,也就是說block只在定義的那部分區域有效,所以要是使用copy將block拷貝,從棧上拷貝到堆上。

4.oc的執行時特徵具體指的是什麼?有什麼應用?

在oc中,runtime是一套底層的c語言api,所編寫的oc**都會在程式執行過程中轉化為runtime的c語言**。oc的執行機制是說在程式執行時才會去確定物件的型別和物件所要呼叫的方法。

利用oc的執行時特徵,可以動態的給類增加和修改屬性和方法。

5.類別和擴充套件是什麼?有什麼區別?

類別也叫分類,就是把乙個類按照特徵型別分成幾個部分,寫在乙個檔案或者分開寫在不同的檔案,或者用來給不知道的原始碼的類新增方法。類別中的方法優先順序高於原來的類,兩個類別中相同的方法優先順序按照後編譯的順序。類別不能直接新增屬性,但可以通過執行時特徵繫結關聯物件新增屬性。

擴充套件也叫作匿名分類,可以新增屬性,隱藏類的實現細節。

6.oc有多繼承嗎?使用什麼代替?cocoa框架所有的類都是繼承nsobject的嗎?

oc不支援多繼承,可以使用協議來實現,基本所有的都是繼承於nsobject,但是有乙個模擬較例外,因為用的比較少所以會被忽略,就是nsproxy。

7.深拷貝和淺拷貝的區別

簡單來講,淺拷貝是拷貝物件位址,即新建乙個指標但是指標指向的還是原來的那一片記憶體空間,所以拷貝的和被拷貝的兩個指向的都是同乙個物件。

深拷貝會將物件整個拷貝,形成乙個和原物件一樣的物件,但是儲存在乙個新位址,拷貝的和被拷貝的兩個雖然物件是一樣的但是是兩個不同的記憶體位址。

以上都是很常見的,別的在慢慢補,有錯誤疏漏的地方歡迎指出~

遊戲開發面試知識點彙總

演算法24點演算法 從n個村莊選m個點建郵局,使得每個村莊到郵局的距離和最小 遊戲常識 遊戲中排行榜的設計 利用mysql來實現,存放一張使用者積分表user score 積分排名陣列實現 自己實現排序樹 elo評分演算法原理與實現 點和矩形碰撞 點和圓形碰撞 矩形碰撞 圓形碰撞 在資料中找到前k大...

iOS面試知識點

現在進入本篇的正題。本篇的面試題是我認為比較好的ios開發基礎知識點,希望大家看過這後在理解的基礎上掌握而不是死記硬背。死記硬背很快也會忘記的。1.1 父類實現深拷貝時,子類如何實現深度拷貝。父類沒有實現深拷貝時,子類如何實現深度拷貝。1.2 kvo,nsnotification,delegate及...

iOS開發 面試

今天一大清早去面試,公司距離我家還挺近的,花了乙個小時走著去,也順路印下簡歷,理理思路,到了公司面試官什麼的都不錯,還給我講了很多知識,收穫也是滿滿的,總結下今天都遇到了哪些問題,調整調整狀態.1,當需要自定義tabbar的item的數量可變時怎麼做的 這裡原本是想說自定義tabbar的,不過估計考...