ios 平滑移動view iOS面試題梳理

2021-10-13 19:50:27 字數 4179 閱讀 6596

oc作為一門物件導向的語言,自然具有物件導向的語言特性:封裝、繼承、多型。它既具有靜態語言的特性(如c++),又有動態語言的效率(動態繫結、動態載入等)。總體來講,oc確實是一門不錯的程式語言。

objective-c具有相當多的動態特性,表現為三方面:動態型別(dynamic typing)、動態繫結(dynamic binding)和動態載入(dynamic loading)。動態——必須到執行時(run time)才會做的一些事情。

1.動態型別:即執行時再決定物件的型別。這種動態特性在日常的應用中非常常見,簡單來說,就是id型別。事實上,由於靜態型別的固定性和可預知性,從而使用的更加廣泛。靜態型別是強型別,而動態型別屬於弱型別,執行時決定接受者。

2.動態繫結:基於動態型別,在某個例項物件被確定後,其型別便被確定了,該物件對應的屬性和響應訊息也被完全確定。

3.動態載入:根據需求載入所需要的資源,最基本就是不同機型的適配,例如,在retina裝置上載入@2x的,而在老一些的普通蘋裝置上載入原圖,讓程式在執行時新增**模組以及其他資源,使用者可根據需要載入一些可執行**和資源,而不是在啟動時就載入所有元件,可執行**可以含有和程式執行時整合的新類。

之前:oc記憶體管理遵循「誰建立,誰釋放,誰引用,誰管理」的機制,當建立或引用乙個物件的時候,需要向她傳送alloc、copy、retain訊息,當釋放該物件時需要傳送release訊息,當物件引用計數為0時,系統將釋放該物件,這是oc的手動管理機制(mrc)。

目前:ios 5.0之後引用自動管理機制——自動引用計數(arc),管理機制與手動機制一樣,只是不再需要呼叫retain、release、autorelease;

它編譯時的特性,當你使用arc時,在適當位置插入release和autorelease;它引用strong和weak關鍵字,strong修飾的指標變數指向物件時,當指標指向新值或者指標不復存在,相關聯的物件就會自動釋放,而weak修飾的指標變數指向物件,當物件的擁有者指向新值或者不存在時weak修飾的指標會自動置為nil。

1.如果使用alloccopy(mutablecopy)或者retian乙個物件時,你就有義務,向它傳送一條release或者autorelease訊息。其他方法建立的物件,不需要由你來管理記憶體。

2.向乙個物件傳送一條autorelease訊息,這個物件並不會立即銷毀,而是將這個物件放入了自動釋放池,待池子釋放時,它會向池中每乙個物件傳送 一條release訊息,以此來釋放物件。

3.向乙個物件傳送release訊息,並不意味著這個物件被銷毀了,而是當這個物件的引用計數為0時,系統才會呼叫dealloc方法,釋放該物件和物件本身它所擁有的例項。

1.如果乙個物件有乙個_strong型別的指標指向著,找個物件就不會被釋放。如果乙個指標指向超出了它的作用域,就會被指向nil。如果乙個指標被指向nil,那麼它原來指向的物件就被釋放了。當乙個檢視控制器被釋放時,它內部的全域性指標會被指向nil。不管全域性變數還是區域性變數用_strong描述就行。

2.區域性變數:出了作用域,指標會被置為nil;

3.方法內部建立物件,外部使用需要新增_autorelease;

4.連線的時候,用_weak描述。

5.**使用unsafe_unretained就相當於assign

6.block中為了避免迴圈引用問題,使用_weak描述;

7.宣告屬性時,不要以new開頭。如果非要以new開頭命名屬性的名字,需要自己定製get方法名,如

@property(getter=thestring) nsstring * newstring;
8.如果要使用自動釋放池,用@autoreleasepool{}9.arc只能管理foundation框架的變數,如果程式中把foundation中的變數強制換成core foundation中的變數需要交換管理權;

10.在非arc工程中採用arc去編譯某些類:-fobjc-arc

11.在arc下的工程採用非arc去編譯某些類:-fno-fobjc-arc

mvc是一種架構模式,m表示model,v表示檢視view,c表示控制器controller:

1.model負責儲存、定義、運算元據;

2.view用來展示書給使用者,和使用者進行操作互動;

3.controller是model和view的協調者,controller把model中的資料拿過來給view用。controller可以直接與model和view進行通訊,而view不能和controller直接通訊。

4.view與controller通訊需要利用**協議的方式,當有資料更新時,model也要與controller進行通訊,這個時候就要用notification和kvo實現;

5.這個方式就像乙個廣播一樣,model發訊號,controller設定監聽接受訊號,當有資料更新時就發訊號給controller,model和view不能直接進行通訊,這樣會違背mvc設計模式。

1.viewmodel層,就是view和model層的粘合劑,他是乙個放置使用者輸入驗證邏輯,檢視顯示邏輯,發起網路請求和其他各種各樣的**的極好的地方。說白了,就是把原來viewcontroller層的業務邏輯和頁面邏輯等剝離出來放到viewmodel層。

2.view層,就是viewcontroller層,他的任務就是從viewmodel層獲取資料,然後顯示。

2.移動終端開發是支援arc(automatic reference counting的簡稱),arc是在ios5之後推出的新技術,它與gc的機制是不同的。

3.我們在編寫**時, 不需要向物件傳送release或者autorelease方法,也不可以呼叫delloc方法,編譯器會在合適的位置自動給使用者生成release訊息(autorelease),arc 的特點是自動引用技術簡化了記憶體管理的難度.

oc中的協議是乙個方法列表,且多少有點相關。

它的特點是可以被任何類使用(實現),但它並不是類(這裡我們需要注意),自身不會實現這樣方法, 而是又其他人來實現協議經常用來實現委託物件(委託設計模式)。

如果乙個類採用了乙個協議,那麼它必須實現協議中必須需要實現的方法,在協議中的方法預設是必須實現(@required),新增關鍵字@optional,表明一旦採用該協議,這些「可選」的方法是可以選擇不實現的。

1.不需要通過增加子類而增加現有類的行為(方法),且類目中的方法與原始類方法基本沒有區別;

2.通過類目可以將龐大乙個類的方法進行劃分,從而便於**的日後的維護、更新以及提高**的閱讀性;

1.無法向類目新增例項變數,如果需要新增例項變數,只能通過定義子類的方式;

2.類目中的方法與原始類以及父類方法相比具有更高優先順序,如果覆蓋父類的方法,可能導致super訊息的斷裂。因此,最好不要覆蓋原始類中的方法。

1.給系統原有類新增方法,不能擴充套件屬性。如果類別中方法的名字跟系統的方法名一樣,在呼叫的時候類別中的方法優先順序更高;

2.分散類的實現:如:

+ (nsindexpath *)indexpathforrow:(nsinteger)row

insection:(nsinteger)section

3.原本屬於nsindexpath的方法,但因為這個方法經常使用的表的時候呼叫、跟表的關係特別密切,因此把這個方法一類別的形式、宣告在uitableview.h中。

4.宣告私有方法,某乙個方法只實現,不宣告,相當於私有方法。

5.類別不能宣告變數,類別不可以直接新增屬性。property描述setter方法,就不會報錯。

ios面試高薪,高階 你會這些呢嘛?(持續更新中)​www.jianshu.com

火柴移動面試題

最近我的乙個朋友找到了乙份工作,採訪公司,我們遇到了乙個火柴棍移動面試題,我覺得有點意思,在此拋磚引玉。題目大致是這種 乙個三個數的式子,移動當中一根火柴。使等式成立。用程式或實現 能夠用偽碼 輸出能成立的等式。注 能夠移走一根火柴變成 比如 廢話不說,直接上 哪位有更好的方法,請分享一下,多謝 i...

iOS 面試題(六)

回答person的retaincount值,並解釋為什麼 person per person alloc init self.person per 1 或者2 看物件用什麼屬性修飾,person類物件在建立的時候引用計數加1,若用 assign類不會使引用計數加1的屬性修飾 person的retai...

iOS 面試題(九)

objective c有私有方法麼?私有變數呢?如多沒有的話,有沒有什麼代替的方法?oc中沒有私有方法,有私有變數 私有方法可以用category 類目 extension 延展 來代替 2 import include和 class有什麼區別 include 用於系統自帶的標頭檔案的引用,編譯器會...