活到老学到老: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; 然后在block里面使用self 。还有如果要在block里面改外边的值,需要加__block 修饰

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
  • 归档

  

时间: 2024-10-03 11:42:26

活到老学到老:iOS开发中的基础知识(一)的相关文章

IOS科研IOS开发笔记学习基础知识

这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollView; tableScrollView=[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];//窗体大小 tableScrollView.contentSize=CGSizeMake(640, 480);//设置内容视图的大

iOS开发中多线程基础

耗时操作演练 代码演练 编写耗时方法 - (void)longOperation { for (int i = 0; i < 10000; ++i) { NSLog(@"%@ %d", [NSThread currentThread], i); } } 直接调用耗时方法 // 1> 直接调用耗时方法 [self longOperation]; 运行測试效果 在后台运行耗时方法 // 2> 在后台运行耗时方法 [self performSelectorInBackgro

iOS开发多线程篇—基础知识 NSOperation

原文  http://www.cnblogs.com/dyf520/p/3807187.html -------NSOperation简介---- 1.NSOperation的作用 ·配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQueue实现多线程的具体步骤 ·先将需要执行的操作封装到一个NSOperation对象中 ·然后将NSOperation对象添加到NSOperationQueue中 ·系统会自动将

iOS开发UI基础—IOS开发中Xcode的一些使用技巧

iOS开发UI基础-IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车           显示主窗口 cmd + 0             导航窗口 option + cmd + 0    工具窗口 在.m & .h之间切换           control + cmd + 上/下

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发中三种简单的动画设置

iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所有动画提交并生成动

iOS开发中GCD在多线程方面的理解

GCD为Grand Central Dispatch的缩写. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.在Mac OS X 10.6雪豹中首次推出,并在最近引入到了iOS4.0. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题. GCD可以完成很多事情,但是这里仅关注在iOS应用中实现多线程所需的一些基础知识. 在开始之前,需要理解是要提供给GCD队列的是代

iOS开发中UIPopoverController的使用详解

这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤