活到老學到老:iOS開發中的基礎知識(一)

丶Pz發表於2016-02-27

本文參考 標哥的部落格:寶庫iOS開發筆試題 進行學習整理。與其說是看面試題,不如說是對自己知識的鞏固。工欲善其事必先利其器,基礎知識不牢固可能會導致程式設計中的一些注意不到的問題。總之一句話:活到老,學到老。

1.陣列中的元素去重問題。

//重複元素
    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"1",@"2",@"3",nil];
    
    NSMutableArray *marray = [NSMutableArray arrayWithCapacity:array.count];
    
    //比較笨的方法 遍歷迴圈
    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if (![marray containsObject:obj]) {
            [marray addObject:obj];
        }
    }];
    NSLog(@"%@",marray);
    
    //通過 KVC 的這個 distinctUnionOfObjects.self  去重,不過順序會亂
//    array = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
//    NSLog(@"%@",array);
//    
//    //沒有順序,通過dictionary去重
//    NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:array.count];
//    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//        [dict setValue:obj forKey:obj];
//    }];
//    NSArray *newArray = dict.allValues;
//    NSLog(@"%@",newArray);
//    //排序
//    newArray = [newArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
//        NSString *item1 = obj1;
//        NSString *item2 = obj2;
//        return [item1 compare:item2 options:NSLiteralSearch];
//    }];
//    NSLog(@"%@",newArray);
//    
//    //利用NSSet 無順序
//    NSSet *set = [NSSet setWithArray:array];
//    NSArray *newArray = [set allObjects];
//    NSLog(@"%@",newArray);
//    
//    
//    //利用NSOrderSet,直接排序了
//    NSOrderedSet *orderSet = [NSOrderedSet orderedSetWithArray:array];
//    NSArray *newArray = orderSet.array;
//    NSLog(@"%@",newArray);

 

2.NSArray、NSSet、NSDictionary與NSMutableArray、NSMutableSet、NSMutableDictionary 的特性和作用

3.日期格式化的問題

 NSDate *date = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //設定date格式
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSString *strDate = [formatter stringFromDate:date];
    //NSDate *date1 = [formatter dateFromString:strDate];
    NSLog(@"%@",strDate);

4.在App中混合HTML5開發App如何實現的。在App中使用HTML5的優缺點是什麼?

  (1)HTML5 頁面更新的時候不需要重新發布,只需要更新伺服器的頁面就可以了。

  (2)HTML5 頁面巢狀在 WKWebView 裡面 使用,原生App可以和HTML5裡面的元素互相呼叫

  (3)HTML5 頁面顯示不如App流暢。

5.描述一下iOS的記憶體管理,在開發中對於記憶體的使用和優化包含哪些方面。我們在開發中應該注意哪些問題。

6.plist檔案是用來做什麼的。一般用它來處理一些什麼方面的問題。

Plist檔案通常用於儲存使用者設定,也可以用於儲存捆綁的資訊,比如儲存一些死資料,城市,商品類別之類的東西。不需要經常從伺服器更新。

7.請簡單寫出增、刪、改、查的SQL語句。

  對於經常做CURD的我,這個就比較簡單了。 就是  select ,insert,update,delete 幾個關鍵字,當然SQL還有很多更加複雜的操作。

  (1)SELECT * FROM TABLE_NAME WHERE EXPRESSION

  (2)INSERT INTO TABLE_NAME (FIELD1,FIELD2,FIELD3) VALUES (VALUE1,VALUE2,VALUE3)

  (3)UPDATE TABLE_NAME SET FIELD1=VALUE1,FIELD2=VALUE2 WHERE EXPRESSION

  (4)DELETE FROM TABLE_NAME WHERE EXPRESSION

8.請寫出UIViewController的完整生命週期

sub loadView

sub viewDidLoad

main viewWillDisappear

sub viewWillAppear

sub viewDidAppear

main viewDidDisappear

sub viewWillDisappear

main viewWillAppear

main viewDidAppear

sub viewDidDisappear

sub dealloc

9.請寫出有多少有方法給UIImageView新增圓角?

10.請描述事件響應者鏈的工作原理

11.如何避免使用block時發生迴圈引用

  常用的方法有將self改為弱引用  __weak typeof(self) *weakSelf = self;或者新增 __unsafe_unretained修飾。 然後在block裡面使用weakSelf 。

  還有如果要在block裡面改外邊的值,需要加__block 修飾 或者將變數設定為static

12.請比較GCD與NSOperation的異同

13.請寫出NSTimer使用時的注意事項(兩項即可)

  • NSTimer在UITableViewCell中使用是,需要將timer加到runLoop中。
 countDownTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(countDown:) userInfo:nil repeats:YES];
      NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
      [currentRunLoop addTimer:countDownTimer forMode:NSRunLoopCommonModes];
  • 同一個timer在重複使用之前必需invalidate, 否則會造成之前的timer無法停掉,兩個timer同時存在。導致的現象就是timer同時更新兩次。

14.說說Core Animation是如何開始和結束動畫的

15.iOS中快取一定量的資料以便下次可以快速執行,那麼資料會儲存在什麼地方,有多少種儲存方式?

  • 偏好設定 NSUserDefaults
  • plist檔案
  • Core Data
  • SqlLite
  • 歸檔

  

相關文章