牛客网 iOS 题 42-65

牛客网 iOS 题 42-65

42.在移动端浏览器,页面采用 click 时间,会存在300ms 延迟:

主要原因:浏览器需要等待一段时间来判断是不是双击(double tap)

43.混合应用(Hybird App)

混合应用是在 Native App 上结合 Web View 来加载 Web 资源的 App,即在 native 中提供一个容器,用来加载 h5:
优势:兼容性良好,成本低,更新快
劣势:性能相对较差,用户体验差

44.以下代码错误的地方

NSTimer *myTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(doSomeThing:) userInfo:nil repeats:YES];
[MyTimer fire];

创建 NSTimer 方法主要分为两个类型
1.已经包含了创建与运行方法:
scheduledTimerWithTimeInterval
2.需要在创建后手动添加进 Runloop:

NsTimer *timer1 = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(timeMethod:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer1 forMode:NSDefaultRunLoopMode];

45.什么情况下使用 weak 关键字,相比 assign 有什么不同?

  1. 在 ARC 中,在有可能出现循环引用时,往往要通过让其中一端使用 weak 来解决,比如:delegate 代理属性
  2. 自身对它进行一次强引用,没有必要再强引用一次,也会使用 weak;

不同点:
assign 可以用于非 OC 对象,weak 必须用于 OC 对象

  • weak 指示符该属性对被赋值对象持有弱引用,弱引用的意思是:即使该弱引用指向被赋值的对象,该对象也可能被回收。
  • assign: 简单赋值,不更改索引计数(Reference Counting)。适用于基础类型(简单类型,原子类型):NSInteger,CGPoint,CGFloat,C数据类型(int,float,double,char等)。

46.卡顿(特指不流畅的的动画),是 App 开发中最为常见的性能问题表现,在 iOS 中

发生机理:

  1. 网络不畅通,需要加载网络资源的时候卡顿;
  2. 线程阻塞,例如网络请求放在主线程中;
  3. 一次性在内存中加载过多的 UI 控件。

优化思路:

  1. 耗时较大的操作,例如网络请求,放到子线程中,主线程尽量只放些 UI 控件
  2. 减少布局复杂度

47.站在 App 设计和研发的角度,提出你对不同系统,不同品牌,不同机型的设备适配问题的对策。

自由发挥

48.由于 App 启动环节的感受对用户体验影响较大,我们需要在 App 优化中侧重优化启动体验。请列举一些导致【App 启动慢】感受的典型问题或负面模式(Anti-Pattern)及相应的优化策略。

emmmm

49.与 alloc 相反,retain 相反,alloc 配对使用的分别是哪些方法?

  1. dealloc release dealloc
  2. dealloc release release
  3. dealloc dealloc dealloc
  4. release release release

答案:2

alloc 初始化会使对象的 retainCount = 1,所以配对是 realease;
retain 增加引用计数,release 减小引用计数;

50.需要调用 setName 方法需要使用哪个语句?

  1. setName(@"obj")
  2. name = @"object"
  3. self.name = @"object"

答案:3

OC语言在声明对象的时候自动封装了 setter 和 getter 方法,调用方式一般为:

  1. [self setName:@"obj"];
  2. self.name = @"obj";(点语法)

51.关于 NSOperation queue 的说法,正确的是?

  1. 主要用于多线程并发处理
  2. 它是一个队列,有严格的先进先出
  3. 它不会遵守严格的先进先出
  4. 可以通过调整权重开调整队列的执行顺序
    答案:1,3,4

NSOPerationQueue会根据Operation的状态(是否Ready)以及优先级来确定执行的NSOperation的顺序

52.为什么说 Objective-C 是 runtime language?

  1. 将数据类型的确定有编译时,推迟到了运行时
  2. 运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法
  3. 假设 A 继承了 B 类,那么在编译时就已经生成了 A 的实例
  4. 多态是指不同对象以自己的方式响应相同的消息的能力

答案:1,2,4

运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法,是多态的基础。
实例的生成需要开辟空间,所以是在运行期生成

53.下列说法,正确的是?

  1. category 可以在不获悉,不改变原来代码的情况下往里面添加新方法,只能添加,不能删除修改
  2. implement 可以增加,修改或删除方法,并且可以增加属性
  3. extensions 可以添加属性
  4. extensions 可以添加方法而不用实现

答案:1,3

继承(inherit)可以增加,修改或删除方法,并且可以增加属性
extensions 添加的方法必须在被拓展的类的实现文件中实现

54.关于浅复制和深复制,下列说法正确的是

  1. 浅层复制:只复制引用对象的指针,而不复制引用对象本身;
  2. 深层复制:复制引用对象本身
  3. 如果是浅复制,修改一个对象可能会影响另一个对象;
  4. 如果是深复制,修改一个对象不会影响另外一个对象;

答案:1,2,3,4

55.下列程序输出的是

NSMutableArray *ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"];
[str retain];
[ary addObject:str];
NSLog(@"%@%d", str, [str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%@%d", str, [str retainCount]);
[ary removeAllObjects];
NSLog(@"%@%d", str, [str retainCount]);
  1. 2,3,1
  2. 3,2,1
  3. 1,2,3
  4. -1,-1,-1

答案:4

在 MRC 模式下,NSString依然不能手动分配内存,在 OC 中系统有对其特殊的处理方式

56.关于内存管理,下列说法中错误的是

  1. 谁申请,谁释放
  2. 内存管理主要要避免“过早释放”和“内存泄露”,对于“过早释放”需要注意@property 设置特性时,一定要对特性关键字,对于“内存泄漏”,一定要申请了要负责释放
  3. 关键字 alloc 或 new 生成的对象可以自动释放
  4. 设置正确的 property 属性,对于 retain 需要在合适的地方释放

答案:3

alloc 和 new 生成的对象不会自动释放,要自动释放需要调用 autorelease 方法。

57.关于 readwrite,readonly,assign,automatic 的说法,下列说法错误的是

  1. readwrite 是可读可写特性,会同时生成 getter 和 setter 方法;
  2. readonly 是只读特性,只会生成 getter 方法;
  3. assign 是赋值属性,setter 方法将传入参数赋值给实例变量;
  4. nonatomic 是非原子操作,决定编译器生成的 setter 和 getter 方法是否原子操作;并表示多线程安全;一般使用 atomic;

答案:4

atomic 才是线程安全的,但是更耗费性能,一般常用的是 nonatomic。

58.以下说法正确的是

  1. Objective-C 支持多重继承
  2. Objective-C 中的类可以实现多个接口
  3. Objective-C 中导入头文件用的是 #include
  4. @class 用于注入对象

答案:2

OC 只支持单一继承,但是可以利用协议代理的方法实现多个协议和接口;
导入文件使用 #import,可以避免重复导入;
@class 用于前向声明

59.在 UIViewController 类中与模态相关方法有哪些?

  1. presentViewController: animated:completion
  2. dismissViewControllerAnimated:completion:
  3. addChildViewController:
  4. removeFromParentViewController

答案:1,2

iOS 中的模态视图(Modal View):一般带有一个完成键和取消键,例如警告框

60.iOS 中导航设计模式有:

  1. 平铺导航 UITabbarController
  2. 标签导航 UINavigationController
  3. 树形导航 UIPageViewController

61.下面与导航相关的视图控制器有

  1. UIViewController
  2. UINavigationController
  3. UITabBarController
  4. UITableViewController

答案:1,2,3

UIViewController 是 UINavigationController 和 UITabBarController 的父类

62.平铺导航模式是在内容组织上没有层次关系,展示的内容都放置在一个主屏幕上,采用分屏或者分页控制器进行导航,可以左右或者上下滑动屏幕查看内容。

答案:1

平铺导航模式是指内容间没有从属关系

63.标签导航模式是在内容被分成几个功能模块,每个功能模块之间没有什么关系。通过标签管理各个功能模块,点击标签切换功能模块。

答案:1

64.树形导航模式是在内容有层次的,从上到下细分或者分类包含等关系,例如黑龙江省与哈尔滨的关系,黑龙江省包含了哈尔滨,哈尔滨又包含了道里区、道外区等。

答案:1

65.模态视图是在导航过程中,有的时候需要放弃主要任务转而做其他次要任务,完成次要任务后要再回到主要任务,这个次要任务就是在“模态视图”中完成的。

答案:1

你可能感兴趣的:(牛客网 iOS 题 42-65)