iOS面試題五

1.Objective-C 有私有方法嗎?私有變量呢?如果沒有的話,有沒有什麼代替的方法?

Objective-C 中的方法分爲:靜態方法和實例方法

沒有私有方法,有私有變量,所有實例變量默認都是私有的,所有實例方法默認都是公有的

私有方法可以用 category extension 來代替


2. #import#include@class有什麼區別?

 @class一般用於頭文件中需要聲明該類的某個實例變量的時候用到,它只是聲明瞭一個類名,關於這個類的內部實現都沒有告訴編譯器,m文件中還是需要使用#import #import比起#include的好處就是不會引起交叉編譯。


3.談談你對MVC的理解?爲什麼要用MVC?在CocoaMVC是怎麼實現的?你還熟悉其他的OC設計模式或別的設計模式嗎?

 MVC就是Model-View-Controller的縮寫,M指的是業務模型,V指的是用戶頁面,C指的是控制器。MVC是架構模式,是講M V的代碼分離,從而使同那個一個程序可以使用不同的表現形式。 M:表示數據和業務規則,V是用戶看到的並與之交互的頁面,C是接受用戶的輸入並調用MV取完成用戶需求的。

單例模式,Delegate模式,KVC模式,消息通知模式,Target/Action模式


4. 如何監測系統鍵盤的彈出?

UIKeyboardDidShowNotification(鍵盤彈出通知)

UIKeyboardWillHideNotification (鍵盤消失通知)


[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector() name:UIKeyboardWillShowNotification  object:nil];


5.舉出5個以上你所熟悉的iOS  SDK庫有哪些和第三方庫有哪些?

AFNetworking,SDWebimage,ShareSDK,MJRefresh,FMDB,MBProgressHUD


6.如何將產品進行多語言發佈?

在工程InfoPlist.strings中添加發布時需要的語言,並在Info.plist中添加新的屬性Application has localized display name 設置類型爲boolean並將value設置爲YES,創建".strings"文件進行字符串 圖片和其他文件的多語言處理


7.如何將敏感字變成** ?

 // 存取敏感字的數組
    NSMutableArray *array = [[NSMutableArray alloc]init];
    // 向敏感字數組裏添加元素
    NSString *element1 = @"敏感字";
    NSString *element2 = @"我";
    [array addObject:element1];
    [array addObject:element2];
    // 要判斷的字符串
    NSMutableString *str = [[NSMutableString alloc]initWithString:@"我是敏感字"];
    for (int i = 0; i < array.count; i++) {
        // 敏感字替代字符串
        NSMutableString *replaceString = [[NSMutableString alloc]init];
        // 判斷字符串是否包含指定字符串,返回位置和長度
        NSRange range = [str rangeOfString:array[i]];
        for (int j = 0; j<range.length; j++) {
            [replaceString appendString:@"*"];
        }
        // 某個範圍用字符代替
        [str replaceCharactersInRange:range withString:replaceString];
    }
    NSLog(@"%@",str);


8.objc中的減號與加號代表什麼?

前置加號(+)的方法爲類方法 這類方法是可以直接用類名來調用的。它的作用是創建一個實例,有人把它稱爲創建實例的工廠方法

前置減號(-)的方法爲實例方法,必須使用類的實例纔可以調用


9. 單例目的是什麼?

目的:封裝一個共享的資源 提供一個固定的實例創建的方法  提供一個標準的實例訪問接口,節省內存。


10 說說響應鏈

首先要明確的是:在IOS中,有響應者鏈對事件進行響應,所有的響應類都是UIResponder的子類,響應者鏈是由不同的對象組成的層次結構,其中的每一個對象將依次獲得響應事件消息的機會。


響應者鏈的過程:

當事件發生的時候,響應鏈首先被髮給第一個響應者(往往是事件發生的視圖,也就是用戶觸摸屏幕的地方)事件將沿着響應者鏈一直傳遞下去,直到被接受並處理。一般來說,第一響應是視圖對象或者其子類,當其被觸摸後事件就交它處理,如果它不處理,事件就會被傳遞給視圖控制器UIViewController(如果存在)然後是它的父視圖,以此類推直到頂層視圖。接下來會沿着頂層視圖(top View)到窗口(UIWidow對象)再到程序的UIApplication對象 ,如果整個過程沒有響應這個事件,則該事件被丟棄。一般情況下,在響應者鏈中只要有對象處理事件,事件就會傳遞。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章