zoukankan      html  css  js  c++  java
  • 活到老学到老:iOS开发中的基础知识(一)

    本文参考 标哥的博客:宝库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
    • 归档

      

  • 相关阅读:
    Linux 设置core dump
    ffmpeg取rtsp流时av_read_frame阻塞的解决办法
    Qt 防多开
    Linux环境中Qt程序的手工发布
    [技术选型] SSH/SSI框架替代品
    [maven] settings 文件 国内镜像站
    [Intellij] 在IntelliJ IDEA 中创建运行web项目
    [Intellij] Intellij IDEA 使用中遇见的问题
    [spark 快速大数据分析读书笔记] 第一章 导论
    [hbase] 查询数据
  • 原文地址:https://www.cnblogs.com/panzi/p/5219993.html
Copyright © 2011-2022 走看看