面試題
技術(shù)
基礎(chǔ)
-
為什么說Objective-C是一門動態(tài)的語言?
Objective-C 運行時機制是在運行的時候才決定一個對象的類型示辈,消息機制是在運行的時候通過發(fā)送消息來調(diào)用函數(shù)悯仙,也正因為運行時機制把編譯時的工作轉(zhuǎn)到運行時實現(xiàn)OC的動態(tài)特性。
-
講一下MVC和MVVM昼伴,MVP?
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,Model 呈現(xiàn)數(shù)據(jù),View 呈現(xiàn)用戶界面,而 View Controller 調(diào)節(jié)它兩者之間的交互。
- 視圖(View):構(gòu)建UI的類窗轩;例如:按鈕,標簽座咆,進度條等痢艺。
- 模型(Model):視圖類所需要的數(shù)據(jù);例如:表格需要顯示的文字介陶。
- 控制器(Controller):連接視圖類和模型類堤舒,任務是使數(shù)據(jù)顯示在屏幕上。
MVVM全名是Model View View-Model哺呜,ViewModel將表示邏輯從 Controller 移出放到一個新的對象里舌缤,即 View Model。就是那些將 Model 數(shù)據(jù)轉(zhuǎn)換為 View 可以呈現(xiàn)的東西的事情,例如將一個 NSDate 轉(zhuǎn)換為一個格式化過的 NSString国撵。
MVP全名是Model-view-presenter陵吸,是使用者界面設計模式的一種。
- Model 定義使用者界面所需要被顯示的數(shù)據(jù)模型介牙,一個模型包含著相關(guān)的業(yè)務邏輯壮虫。
- View 視圖為呈現(xiàn)使用者界面的終端,用以表現(xiàn)來自 Model 的數(shù)據(jù)环础,和使用者命令路由再經(jīng)過 Presenter 對事件處理后的數(shù)據(jù)囚似。
- Presenter 包含著元件的事件處理,負責檢索 Model 取得數(shù)據(jù)线得,和將取得的數(shù)據(jù)經(jīng)過格式轉(zhuǎn)換與 View 進行溝通饶唤。
- MVP 設計模式通常會再加上 Controller 做為整體應用程序的后端程序工作。
- 為什么代理要用weak贯钩?代理的delegate和dataSource有什么區(qū)別募狂?block和代理的區(qū)別?
-
屬性的實質(zhì)是什么?包括哪幾個部分魏保?屬性默認的關(guān)鍵字都有哪些熬尺?@dynamic關(guān)鍵字和@synthesize關(guān)鍵字是用來做什么的摸屠?
@property 的本質(zhì)是:
@property = ivar + getter + setter;
包括哪幾個部分:
iavr ; getter ; setter;``(實例變量 + 存取方法)
屬性默認的關(guān)鍵字都有哪些
atomic
readwrite
assign
-
@dynamic關(guān)鍵字和@synthesize關(guān)鍵字是用來做什么的谓罗?
- 1)@property有兩個對應的詞,一個是@synthesize季二,一個是@dynamic檩咱。如果@synthesize和@dynamic都沒寫,那么默認的就是@syntheszie var = _var;
- @synthesize的語義是如果你沒有手動實現(xiàn)setter方法和getter方法胯舷,那么編譯器會自動為你加上這兩個方法刻蚯。
- @dynamic告訴編譯器:屬性的setter與getter方法由用戶自己實現(xiàn),不自動生成桑嘶。
-
屬性的默認關(guān)鍵字是什么炊汹?
atomic
readwrite
assign
-
*NSString為什么要用copy關(guān)鍵字,如果用strong會有什么問題逃顶?(注意:這里沒有說用strong就一定不行讨便。使用copy和strong是看情況而定的) *
- 因為NString,NSArray以政,NSDictionary都有自己對應的子類:NSMutableString霸褒,NSMutableArray,NSMutableDictionary盈蛮,而父類指針可以指向子類對象废菱,使用copy可以讓本對象不受外界(子對象)影響,無論給我傳入的是一個可變對象還是一個不可變對象,都能保證自身持有的是一個不可變副本殊轴。
- 使用strong時衰倦,如果這個屬性指向一個可變對象,修改可變對象時梳凛,這個屬性值也會被修改耿币。
- 引用借鑒:http://www.reibang.com/p/1e1a6f9c26f8
- 如何令自己所寫的對象具有拷貝功能?
若想令自己所寫的對象具有拷貝功能,則需實現(xiàn) NSCopying 協(xié)議韧拒。如果自定義的對象分為可變版本與不可變版本淹接,那么就要同時實現(xiàn) NSCopying 與 NSMutableCopying 協(xié)議。
具體步驟:
需聲明該類遵從 NSCopying 協(xié)議
實現(xiàn) NSCopying 協(xié)議叛溢。該協(xié)議只有一個方法:
- (id)copyWithZone:(NSZone *)zone;
注意:一提到讓自己的類用 copy 修飾符塑悼,我們總是想覆寫copy方法,其實真正需要實現(xiàn)的卻是 “copyWithZone” 方法楷掉。
-
可變集合類 和 不可變集合類的 copy 和 mutablecopy有什么區(qū)別厢蒜?如果是集合是內(nèi)容復制的話,集合里面的元素也是內(nèi)容復制么烹植?
- [immutableObject copy]是淺拷貝
- [immutableObject mutableCopy]是深拷貝
- [mutableObject copy]是深拷貝
- [mutableObject mutableCopy]是深拷貝
集合對象的深拷貝只是對象本身斑鸦,而集合對象的元素還是地址的拷貝,即單層深拷貝
-
為什么IBOutlet修飾的UIView也適用weak關(guān)鍵字草雕?
通過加載xib得到的用戶界面巷屿,在加載時就已經(jīng)是view hierarchy(視圖層次)的一部分了,后者中的指向都是strong的墩虹,因此IBOut指向的對象不該再被hold一次嘱巾,從而不需要在viewDidUnload方法里再將IBOut指向的對象置為nil.
-
nonatomic和atomic的區(qū)別?atomic是絕對的線程安全么诫钓?為什么旬昭?如果不是,那應該如何實現(xiàn)菌湃?
atomic和nonatomic區(qū)別用來決定編譯器生成的getter和setter是否為原子操作问拘。atomic提供多線程安全,是描述該變量是否支持多線程的同步訪問,如果選擇了atomic 那么就是說惧所,系統(tǒng)會自動的創(chuàng)建lock鎖骤坐,鎖定變量。nonatomic禁止多線程纯路,變量保護或油,提高性能。
* atomic:默認是有該屬性的驰唬,這個屬性是為了保證程序在多線程情況下顶岸,編譯器會自動生成一些互斥加鎖代碼腔彰,避免該變量的讀寫不同步問題。
* nonatomic:如果該對象無需考慮多線程的情況辖佣,請加入這個屬性霹抛,這樣會讓編譯器少生成一些互斥加鎖代碼,可以提高效率卷谈。
* 不過atomic可并不能保證線程安全,atomic只是對setter和getter方法加鎖;要想實現(xiàn)真正的線程安全杯拐,需要對對象進行加鎖,讀取操作結(jié)束的時候再開放給其他線程訪問。
-
UICollectionView自定義layout如何實現(xiàn)世蔗?
自定義UICollectionViewLayout重寫以下方法:
- (void)prepareLayout 準備方法被自動調(diào)用端逼,以保證layout實例的正確。 - (CGSize)collectionViewContentSize 返回collectionView的內(nèi)容的尺寸 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 1.返回rect中的所有的元素的布局屬性 2.返回的是包含UICollectionViewLayoutAttributes的NSArray 3.UICollectionViewLayoutAttributes可以是cell污淋,追加視圖或裝飾視圖的信息顶滩, 通過不同的UICollectionViewLayoutAttributes初始化方法可以得到不同類型的UICollectionViewLayoutAttributes: 1)layoutAttributesForCellWithIndexPath: 2)layoutAttributesForSupplementaryViewOfKind:withIndexPath: 3)layoutAttributesForDecorationViewOfKind:withIndexPath: - (UICollectionViewLayoutAttributes )layoutAttributesForItemAtIndexPath:(NSIndexPath )indexPath 返回對應于indexPath的位置的cell的布局屬性 - (UICollectionViewLayoutAttributes )layoutAttributesForSupplementaryViewOfKind: (NSString )kind atIndexPath:(NSIndexPath *)indexPath 返回對應于indexPath的位置的追加視圖的布局屬性,如果沒有追加視圖可不重載 - (UICollectionViewLayoutAttributes * )layoutAttributesForDecorationViewOfKind: (NSString)decorationViewKind atIndexPath:(NSIndexPath )indexPath 返回對應于indexPath的位置的裝飾視圖的布局屬性寸爆,如果沒有裝飾視圖可不重載 - (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds 當邊界發(fā)生改變時礁鲁,是否應該刷新布局。如果YES則在邊界變化(一般是scroll到其他地方)時赁豆,將重新計算 需要的布局信息仅醇。
3241
32424
34dsfsd