iOS 面試總結 一

iOS 開發工程師之面試總結一

很久沒有出去面試了,大概一年的時間都很穩定,最近出去面試感受內心特別慌,沒有了當時的勇氣了,其實仍是感受本身的準備不是特別的充分,這是主要緣由。

這段時間待得太安逸沒了緊張感,最近一段時間感受本身要和日新月異的新技術脫節了,好多以前學過的東西也生疏了,決定好好總結一下本身和寫下最近面試的經驗。

1.Object-C 是如何實現內存管理的? 經常使用的內存管理語句有哪些?html

Object-C 中的內存管理也就是引用計數機制。
手動引用計數(MRC),當建立一個對象的時候系統會爲這個對象的引用計數置爲1,retain方法會使對象的引用計數加1,release方法會使對象的的引用計數減1,當引用計數爲0時, 調用dealloc方法去銷燬對象。ios

自動引用計數(ARC),自動引用計數的實質仍是經過引用計數機制去管理的,只不夠不用咱們程序員去手動管理,系統會在程序編譯時自動在合適的地方添加retain、release、autorelease 方法去控制引用計數的平衡。
內存管理的經常使用語句有 alloc 、retain 、release 、dealloc 、autorelease 。程序員

順便提一下 內存管理嚴格遵循四條規則?
一、由本身生成的對象,本身持有
二、非本身生成的對象,本身也能持有
三、再也不須要本身持有的對象時釋放
四、非本身持有的對象沒法釋放面試

2.淺拷貝和深拷貝的區別? 寫一段深拷貝的代碼。sql

淺拷貝就是對內存地址的複製,讓目標對象指針和源對象指向同一片內存空間.設計模式

深拷貝就是指拷貝對象的具體內容,而內存地址是自主分配的,拷貝結束以後,兩個對象雖然存的值是相同的,可是內存地址不同,兩個對象也互不影響,互不干涉。性能優化

void testMutable()
{
//可變對象的複製,copy和mutableCopy都是深拷貝
NSMutableString *str1 = [NSMutableString stringWithString:@"test"];
NSMutableString *str2 = [str1 copy];
//copy返回的是不可變對象,所以str2不能改變,會發生崩潰
//[str2 appendString:@"test"];
NSMutableString *str3 = [str1 mutableCopy];
[str3 appendString:@"test"];
NSLog(@"%@ %@ %@",str1,str2,str3);
NSLog(@"%p %p %p",str1,str2,str3);
}

3.下面一點錯誤百出的程序,指出它有什麼問題。網絡

typedef void(^MyBlock)(NSString *str);

@interface ViewController

@property(weak) MyBlock block;
@property(nonatomic,strong) NSString *currentText;

@end
---------------------------
@implementation ViewController

-(void)method{
    NSString *text =@"123";
    self.block = ^(NSString *str){
        self.currentText = str;
        text = str; 
    };
}
@end

---------更正的代碼以下--------
typedef void(^MyBlock)(NSString *str);

@interface ViewController:NSObject

@property(copy) MyBlock block;
@property(nonatomic,copy) NSString *currentText;

@end
---------------------------
@implementation ViewController

-(void)method{
    __block NSString *text =@"123";
    __weak typeof(self) weakSelf = self;
    self.block = ^(NSString *str){
        weakSelf.currentText = str;
        text = str; 
    };
}
@end

4.從名爲 'employee' 的 sqlite 表中查找 'name' 屬性以 'Jo' 開頭的從符合結構的第100條開始10條記錄,按 'updatedAt' 倒序。多線程

這個先不寫了,我要好好看一下在貼出來。
哈哈哈

5.iOS 中經常使用的設計模式有哪些? Notification 和 Delegate 使用區別。併發

MVC 、MVVM 、代理 、block 、KVC 、KVO 。
Notification 和 Delegate 均可以用來傳遞消息。
Delegate 是一對一的,兩者要創建相互關聯。
Notification 是一對一 或 一對多的,兩者不須要作相互關聯。
Delegate 的效率要比 Notification 高。

6.tableView 的DateSource 協議有哪些方法必需要實現,怎麼進行性能優化?

(1)numberOfSectionsInTableView: //可寫可不寫(當一個分區的時可不寫)
(2)tableView:numberOfRowsInSecion:
(3)tableView:cellForRowAtIndexPath:
優化問題:
(1):網絡請求成功後進入後臺進行佈局計算並返回高度緩衝備用。
(2):當cell的subview較多時尤爲是圖片的時候建議用其drawRect:中自行繪製。
(3):透明的問題,將UI元素的透明度設置成不透明的。

7.iOS 中的多線程實現有哪些,對你瞭解最深刻的說說你的理解。

一、NSThread
二、NSOperation
三、Grand Central Dispatch (GCD)

一、使用線程能夠把程序中佔據時間長的任務放到後臺去處理,如圖片、視頻的下載。 二、發揮多核處理器的優點,併發執行讓系統運行的更快、更流暢,用戶體驗更好。 三、能適當提升執行效率,提升資源利用率。 四、建立線程是有開銷的,大量開啓的話,會下降性能;程序設計也會更復雜,好比線程之間的通訊,多線程的數據共享。 5.GCD會自動管理線程的生命週期(建立線程,調度任務,銷燬線程),不須要咱們編寫任何管理線程的代碼。 6.http://blog.sina.com.cn/s/blog_99c943d00102wphm.html

相關文章
相關標籤/搜索