iOS最新面試題匯總(三)

iOS最新面試題匯總:
iOS最新面試題匯總(一)
iOS最新面試題匯總(二)
iOS最新面試題匯總(三)
iOS最新面試題匯總(四)

  1. 下面的代碼輸出什么塔猾?
    @implementation Son : Father
    - (id)init {
       if (self = [super init]) {
           NSLog(@"%@", NSStringFromClass([self class])); // Son
           NSLog(@"%@", NSStringFromClass([super class])); // Son
       }
       return self;
    }
    @end
    // 解析:
    self 是類的隱藏參數(shù)第喳,指向當前調(diào)用方法的這個類的實例。
    super是一個Magic Keyword,它本質(zhì)是一個編譯器標示符拐纱,和self是指向的同一個消息接收者。
    不同的是:super會告訴編譯器敦冬,調(diào)用class這個方法時,要去父類的方法唯沮,而不是本類里的匪补。
    上面的例子不管調(diào)用[self class]還是[super class]伞辛,接受消息的對象都是當前 Son *obj 這個對象。
  1. 寫一個完整的代理夯缺,包括聲明蚤氏、實現(xiàn)
    // 創(chuàng)建
    @protocol MyDelagate
    @required
    -(void)eat:(NSString *)foodName; 
    @optional
    -(void)run;
    @end

    //  聲明 .h
    @interface person: NSObject<MyDelagate>

    @end

    //  實現(xiàn) .m
    @implementation person
    - (void)eat:(NSString *)foodName { 
       NSLog(@"吃:%@!", foodName);
    } 
    - (void)run {
       NSLog(@"run!");
    }

    @end
  1. isKindOfClass、isMemberOfClass踊兜、selector作用分別是什么
    isKindOfClass:作用是某個對象屬于某個類型或者繼承自某類型竿滨。
    isMemberOfClass:某個對象確切屬于某個類型。
    selector:通過方法名捏境,獲取在內(nèi)存中的函數(shù)的入口地址于游。

4. ####delegate 和 notification 的區(qū)別

    1). 二者都用于傳遞消息,不同之處主要在于一個是一對一的垫言,另一個是一對多的贰剥。
    2). notification通過維護一個array,實現(xiàn)一對多消息的轉(zhuǎn)發(fā)筷频。
    3). delegate需要兩者之間必須建立聯(lián)系蚌成,不然沒法調(diào)用代理的方法;notification不需要兩者之間有聯(lián)系凛捏。
  1. 什么是block担忧?
    閉包(block):閉包就是獲取其它函數(shù)局部變量的匿名函數(shù)。
  1. block反向傳值

    在控制器間傳值可以使用代理或者block坯癣,使用block相對來說簡潔瓶盛。

    在前一個控制器的touchesBegan:方法內(nèi)實現(xiàn)如下代碼。

      // OneViewController.m
      TwoViewController *twoVC = [[TwoViewController alloc] init];
      twoVC.valueBlcok = ^(NSString *str) {
        NSLog(@"OneViewController拿到值:%@", str); 
      };
      [self presentViewController:twoVC animated:YES completion:nil];

      // TwoViewController.h   (在.h文件中聲明一個block屬性)
      @property (nonatomic ,strong) void(^valueBlcok)(NSString *str);

      // TwoViewController.m   (在.m文件中實現(xiàn)方法)
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        // 傳值:調(diào)用block
        if (_valueBlcok) {
            _valueBlcok(@"123456");
        }
    }
  1. block的注意點
    1). 在block內(nèi)部使用外部指針且會造成循環(huán)引用情況下示罗,需要用__week修飾外部指針:
        __weak typeof(self) weakSelf = self; 
    2). 在block內(nèi)部如果調(diào)用了延時函數(shù)還使用弱指針會取不到該指針惩猫,因為已經(jīng)被銷毀了,需要在block內(nèi)部再將弱指針重新強引用一下蚜点。
        __strong typeof(self) strongSelf = weakSelf;
    3). 如果需要在block內(nèi)部改變外部棧區(qū)變量的話帆锋,需要在用__block修飾外部變量。
  1. BAD_ACCESS在什么情況下出現(xiàn)禽额?
    答:這種問題在開發(fā)時經(jīng)常遇到。原因是訪問了野指針皮官,比如訪問已經(jīng)釋放對象的成員變量或者發(fā)消息脯倒、死循環(huán)等。
  1. lldb(gdb)常用的控制臺調(diào)試命令捺氢?
    1). p 輸出基本類型藻丢。是打印命令,需要指定類型摄乒。是print的簡寫
        p (int)[[[self view] subviews] count]
    2). po 打印對象悠反,會調(diào)用對象description方法残黑。是print-object的簡寫
        po [self view]
    3). expr 可以在調(diào)試時動態(tài)執(zhí)行指定表達式,并將結(jié)果打印出來斋否。常用于在調(diào)試過程中修改變量的值梨水。
    4). bt:打印調(diào)用堆棧,是thread backtrace的簡寫茵臭,加all可打印所有thread的堆棧
    5). br l:是breakpoint list的簡寫
  1. 你一般是怎么用Instruments的疫诽?
    Instruments里面工具很多,常用:
    1). Time Profiler: 性能分析
    2). Zombies:檢查是否訪問了僵尸對象旦委,但是這個工具只能從上往下檢查奇徒,不智能。
    3). Allocations:用來檢查內(nèi)存缨硝,寫算法的那批人也用這個來檢查摩钙。
    4). Leaks:檢查內(nèi)存,看是否有內(nèi)存泄露查辩。
  1. iOS中常用的數(shù)據(jù)存儲方式有哪些胖笛?
數(shù)據(jù)存儲有四種方案:NSUserDefault、KeyChain宜肉、file匀钧、DB。
    其中File有三種方式:plist谬返、Archive(歸檔)
    DB包括:SQLite之斯、FMDB、CoreData
  1. iOS的沙盒目錄結(jié)構(gòu)是怎樣的遣铝?
沙盒結(jié)構(gòu):
1). Application:存放程序源文件佑刷,上架前經(jīng)過數(shù)字簽名,上架后不可修改酿炸。
2). Documents:常用目錄瘫絮,iCloud備份目錄,存放數(shù)據(jù)填硕。(這里不能存緩存文件麦萤,否則上架不被通過)
3). Library:
        Caches:存放體積大又不需要備份的數(shù)據(jù)。(常用的緩存路徑)
        Preference:設置目錄扁眯,iCloud會備份設置信息壮莹。
4). tmp:存放臨時文件,不會被備份姻檀,而且這個文件下的數(shù)據(jù)有可能隨時被清除的可能命满。
  1. iOS多線程技術(shù)有哪幾種方式?
答:pthread绣版、NSThread胶台、GCD歼疮、NSOperation
  1. GCD 與 NSOperation 的區(qū)別:
GCD 和 NSOperation 都是用于實現(xiàn)多線程:
    GCD 基于C語言的底層API,GCD主要與block結(jié)合使用诈唬,代碼簡潔高效韩脏。
    NSOperation 屬于Objective-C類,是基于GCD更高一層的封裝讯榕。復雜任務一般用NSOperation實現(xiàn)骤素。
  1. 寫出使用GCD方式從子線程回到主線程的方法代碼
答:dispatch_async(dispatch_get_main_queue(), ^{ });
  1. 如何用GCD同步若干個異步調(diào)用?(如根據(jù)若干個url異步加載多張圖片愚屁,然后在都下載完成后合成一張整圖)
// 使用Dispatch Group追加block到Global Group Queue,這些block如果全部執(zhí)行完畢济竹,就會執(zhí)行Main Dispatch Queue中的結(jié)束處理的block。
// 創(chuàng)建隊列組
dispatch_group_t group = dispatch_group_create();
// 獲取全局并發(fā)隊列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_async(group, queue, ^{ /*加載圖片1 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片2 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片3 */ }); 
// 當并發(fā)隊列組中的任務執(zhí)行完畢后才會執(zhí)行這里的代碼
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        // 合并圖片
});
  1. dispatch_barrier_async(柵欄函數(shù))的作用是什么霎槐?
函數(shù)定義:dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);
作用:
    1.在它前面的任務執(zhí)行結(jié)束后它才執(zhí)行送浊,它后面的任務要等它執(zhí)行完成后才會開始執(zhí)行。
    2.避免數(shù)據(jù)競爭

 // 1.創(chuàng)建并發(fā)隊列
 dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
// 2.向隊列中添加任務
dispatch_async(queue, ^{  // 1.2是并行的
    NSLog(@"任務1, %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
    NSLog(@"任務2, %@",[NSThread currentThread]);
});

 dispatch_barrier_async(queue, ^{
    NSLog(@"任務 barrier, %@", [NSThread currentThread]);
});

 dispatch_async(queue, ^{   // 這兩個是同時執(zhí)行的
    NSLog(@"任務3, %@",[NSThread currentThread]);
});
 dispatch_async(queue, ^{
    NSLog(@"任務4, %@",[NSThread currentThread]);
});

 // 輸出結(jié)果: 任務1 任務2 ——》 任務 barrier ——》任務3 任務4 
// 其中的任務1與任務2丘跌,任務3與任務4 由于是并行處理先后順序不定袭景。
  1. 以下代碼運行結(jié)果如何?
  - (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"1");
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2");
    });
    NSLog(@"3");
 }
// 只輸出:1闭树。(主線程死鎖)
  1. 什么是 RunLoop
  從字面上講就是運行循環(huán)耸棒,它內(nèi)部就是do-while循環(huán),在這  個循環(huán)內(nèi)部不斷地處理各種任務报辱。
一個線程對應一個RunLoop与殃,基本作用就是保持程序的持續(xù)運行,處理app中的各種事件碍现。通過runloop幅疼,有事運行,沒事就休息昼接,可以節(jié)省cpu資源爽篷,提高程序性能。

  主線程的run loop默認是啟動的慢睡。iOS的應用程序里面逐工,程序啟動后會有一個如下的main()函數(shù)
  int main(int argc, char * argv[]) {
     @autoreleasepool {
         return UIApplicationMain(argc, argv, nil,   NSStringFromClass([AppDelegate class]));
     }
 }
  1. 什么是 Runtime

Runtime又叫運行時,是一套底層的C語言API漂辐,其為iOS內(nèi)部的核心之一泪喊,我們平時編寫的OC代碼,底層都是基于它來實現(xiàn)的者吁。

聯(lián)系

github地址:https://github.com/meetly
希望大家多多指教!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饲帅,一起剝皮案震驚了整個濱河市复凳,隨后出現(xiàn)的幾起案子瘤泪,更是在濱河造成了極大的恐慌,老刑警劉巖育八,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件对途,死亡現(xiàn)場離奇詭異,居然都是意外死亡髓棋,警方通過查閱死者的電腦和手機实檀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來按声,“玉大人膳犹,你說我怎么就攤上這事∏┰颍” “怎么了须床?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渐裂。 經(jīng)常有香客問我豺旬,道長,這世上最難降的妖魔是什么柒凉? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任族阅,我火速辦了婚禮,結(jié)果婚禮上膝捞,老公的妹妹穿的比我還像新娘坦刀。我一直安慰自己,他們只是感情好绑警,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布求泰。 她就那樣靜靜地躺著,像睡著了一般计盒。 火紅的嫁衣襯著肌膚如雪渴频。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天北启,我揣著相機與錄音卜朗,去河邊找鬼。 笑死咕村,一個胖子當著我的面吹牛场钉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懈涛,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逛万,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了批钠?” 一聲冷哼從身側(cè)響起宇植,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤得封,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后指郁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忙上,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年闲坎,在試婚紗的時候發(fā)現(xiàn)自己被綠了疫粥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腰懂,死狀恐怖梗逮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悯恍,我是刑警寧澤库糠,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站涮毫,受9級特大地震影響瞬欧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罢防,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一艘虎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咒吐,春花似錦野建、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绽昼,卻和暖如春唯鸭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硅确。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工目溉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菱农。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓缭付,卻偏偏與公主長得像,于是被迫代替她去往敵國和親循未。 傳聞我的和親對象是個殘疾皇子陷猫,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容