iOS經典面試題 二

2022-07-15 11:06:13 字數 1665 閱讀 5858

ios經典面試題 (二)

1、kvo,nsnotification,delegate及block區別

kvo就是cocoa框架實現的觀察者模式,一般同kvc搭配使用,通過kvo可以監測乙個值的變化,比如view的高度變化。是一對多的關係,乙個值的變化會通知所有的觀察者。

nsnotification是通知,也是一對多的使用場景。在某些情況下,kvo和nsnotification是一樣的,都是狀態變化之後告知對方。nsnotification的特點,就是需要被觀察者先主動發出通知,然後觀察者註冊監聽後再來進行響應,比kvo多了傳送通知的一步,但是其優點是監聽不侷限於屬性的變化,還可以對多種多樣的狀態變化進行監聽,監聽範圍廣,使用也更靈活。

delegate 是**,就是我不想做的事情交給別人做。比如狗需要吃飯,就通過delegate通知主人,主人就會給他做飯、盛飯、倒水,這些操作,這些狗都不需要關心,只需要呼叫delegate(**人)就可以了,由其他類完成所需要的操作。所以delegate是一對一關係。

block是delegate的另一種形式,是函式式程式設計的一種形式。使用場景跟delegate一樣,相比delegate更靈活,而且**的實現更直觀。  

kvo一般的使用場景是資料,需求是資料變化,比如****變化,我們一般使用kvo(觀察者模式)。delegate一般的使用場景是行為,需求是需要別人幫我做一件事情,比如買賣**,我們一般使用delegate。

notification一般是進行全域性通知,比如利好訊息一出,通知大家去**。delegate是強關聯,就是委託和**雙方互相知道,你委託別人買**你就需要知道經紀人,經紀人也不要知道自己的顧客。notification是弱關聯,利好訊息發出,你不需要知道是誰發的也可以做出相應的反應,同理髮訊息的人也不需要知道接收的人也可以正常發出訊息。

2、tableview滑動卡的的問題主要是因為:的載入耗費過多時間,這時候應該在子執行緒中獲取影象資料,在主線程中賦值imageview即可。

在子執行緒中不能更新ui,所有的ui更新都是在主線程中執行的。

子執行緒中加入nstimer的時候需要手動新增nsrunloop,否則不能迴圈

3、 _block 和 _weak 修飾符的區別

_block不管是arc和mrc模式下都可以使用,可以修飾物件,還可以修飾基本資料型別。

_weak只能在arc模式下使用,頁只能修飾物件(nsstring等),不能修飾基本資料型別(int等)。

_block物件可以在block中被重新賦值,_weak不可以。

4、sdwebimage內部實現過程

1//2

3 sdwebimagemanager *manager =[sdwebimagemanager sharedmanager];

45 [manager downloadimagewithurl:imagepath2 options:sdwebimageretryfailed progress:^(nsinteger receivedsize, nsinteger expectedsize) completed:^(uiimage *image, nserror *error, sdimagecachetype cachetype, bool finished, nsurl *imageurl) ];

5、uibutton的父類是uicontrol,uicontrol的父類是uiview,uiview的父類是uiresponder。

iOS面試題(二)

1.self.和self的區別?id,nil代表什麼?2.nsdate如何格式化輸出?對於格式是否有要求?例項化乙個nsdateformatter物件nsdateformatter dateformatter nsdateformatter alloc init 設定時間格式,這裡可以設定成自己需要...

C 經典面試題 二

最近看一些面試題,覺得如果自己被問到了,並不能很利落的回答出來。一是從來沒有這個意識,二是沒有認真的梳理下。11.引用與指標有什麼區別?參 1 引用必須被初始化,指標不必。2 引用初始化以後不能被改變,指標可以改變所指的物件。3 不存在指向空值的引用,但是存在指向空值的指標。可以參考下 在 5 題中...

經典面試題

1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...