iOS开发-高级汇总

iOS两年前的面试题总结,现在的你掌握了嘛?

2019-06-15  本文已影响200人  _小迷糊_997

序言

这些面试题是两年前的标准了,虽然跟现在的面试需求显得相对简单了点,但是也是可以帮着梳理一下基础方面的知识的!

推荐一个QQ交流群:763164022 !群内有最近整理出来的面试题,以及一些书籍学习资料!也是为了给大部分还在做iOS开发的朋友一个交流圈子!

OC的理解与特性

简述内存管理基本原则

其他注意事项

如何理解MVC设计模式

MVC是一种架构模式,M表示MOdel,V表示视图View,C表示控制器Controller:

如何理解MVVM设计模式

Objective-C 中是否支持垃圾回收机制?

协议的基本概念和协议中方法默认为什么类型

OC中的协议是一个方法列表,且多少有点相关。它的特点是可以被任何类使用(实现),但它并不是类(这里我们需要注意),自身不会实现这样方法, 而是又其他人来实现协议经常用来实现委托对象(委托设计模式)。如果一个类采用了一个协议,那么它必须实现协议中必须需要实现的方法,在协议中的方法默认是必须实现(@required),添加关键字@optional,表明一旦采用该协议,这些“可选”的方法是可以选择不实现的。

简述类目category优点和缺点

优点:
缺点:

类别的作用

循环引用的产生原因,以及解决方法

多个对象间依然会存在循环引用问题,形成一个环,在编程中,形成的环越大越不容易察觉,如下图所示:

解决方法:

键路径(keyPath)、键值编码(KVC)、键值观察(KVO)

键路径
键值编码KVC
键值观察KVO
Demo

比如我自定义的一个button

[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil]; 
#pragma mark KVO 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
     if ([keyPath isEqualToString:@"highlighted"] ) { 
      [self setNeedsDisplay]; 
} 
  } 

对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。

KVC机制通过key找到value的原理

在 Objective-C 中如何实现 KVO

代理的作用

NSNotification、Block、Delegate和KVO的区别

Objective-C中可修改和不可以修改类型

当我们调用一个静态方法时,需要对对象进行 **release **吗?

当我们释放我们的对象时,为什么需要调用[super dealloc]方法,它的位置又是如何的呢?

对谓词的认识

static、self、super关键字的作用

#include与#import的区别、**#import **与@class 的区别

@public、@protected、@private 它们的含义与作用

解释 id 类型

任意类型对象,程序运行时才决定对象的类型。

switch 语句 if 语句区别与联系

均表示条件的判断,switch语句表达式只能处理的是整型、字符型和枚举类型,而选择流程语句则没有这样的限制。但switch语句比选择流程控制语句效率更高。

isMemberOfClass 和 isKindOfClass 联系与区别

iOS 开发中数据持久性有哪几种?

数据存储的核心都是写文件。

CoreData的介绍:

CoreData的特征:

Core Data的6成员对象

Core Data的功能

对象可以被copy的条件

自动释放池工作原理

在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么?

解释self = [super init]方法

定义属性时,什么时候用 assignretain、**copy **以及它们的之间的区别

堆和栈的区别

怎样使用performSelector传入3个以上参数,其中一个为结构体

UITableViewCell上有个UILabel,显示NSTimer实现的秒表时间,手指滚动cell过程中,label是否刷新,为什么?

这是否刷新取决于timer加入到Run Loop中的Mode是什么。Mode主要是用来指定事件在运行循环中的优先级的,分为:

对于单元格重用的理解

解决cell重用的问题

有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成执行?如果需要a、b、c、d顺序执行,该如何实现?

使用block有什么好处?使用NSTimer写出一个使用block显示(在UILabel上)秒表的代码

一个view已经初始化完毕,view上面添加了n个button,除用view的tag之外,还可以采用什么办法来找到自己想要的button来修改button的值

有2种方法解决:

线程与进程的区别和联系?

多线程编程

** 多线程编程是防止主线程堵塞、增加运行效率的最佳方法。**

定时器与线程的区别;

Apple设备尺寸和编程尺寸

TCP和UDP的区别于联系

TCP连接的三次握手

Scoket连接和HTTP连接的区别:

HTTP协议的特点,关于HTTP请求GET和POST的区别

GET和POST的区别

传输数据的大小:

安全性:

ASIHttpRequest、AFNetWorking之间的区别

XML数据解析方式各有什么不同,JSON解析有哪些框架?

如何进行真机调试

APP发布的上架流程

SVN的使用

如何进行网络消息推送

网络七层协议

对NSUserDefaults的理解

SDWebImage原理

调用类别的方法:

OC中是否有二维数组,如何实现二维数组

LayoutSubViews在什么时候被调用?

深拷贝和浅拷贝

单例模式理解与使用

对沙盒的理解

对瀑布流的理解

ViewController 的 loadView,、viewDidLoad,、viewDidUnload 分别是在什么时候调用的?

关键字volatile有什么含意?并给出三个不同的例子:

@synthesize、@dynamic的理解

frame和bounds有什么不同?

view的touch事件有哪些?

  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
  - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 
  - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

自定义实现UITabbarController的原理

iOS中的响应者链的工作原理

View和View之间传值方式

property属性的修饰符的作用

对于Run Loop的理解

SQLite中常用的SQL语句

XIB与Storyboards的优缺点

优点:

缺点:

将字符串“2015-04-10”格式化日期转为NSDate类型

NSString *timeStr = @"2015-04-10";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
formatter.timeZone = [NSTimeZone defaultTimeZone];
NSDate *date = [formatter dateFromString:timeStr];
// 2015-04-09 16:00:00 +0000
NSLog(@"%@", date);

队列和多线程的使用原理

在iOS中队列分为以下几种:

内存的使用和优化的注意事项

UIViewController的完整生命周期

-[ViewController initWithNibName:bundle:];
-[ViewController init];
-[ViewController loadView];
-[ViewController viewDidLoad];
-[ViewController viewWillAppear:];
-[ViewController viewWillLayoutSubviews:];
-[ViewController viewDidLayoutSubviews:];
-[ViewController viewDidAppear:];
-[ViewController viewWillDisappear:];
-[ViewController viewDidDisappear:];
-[ViewController viewWillUnload:];
-[ViewController viewDidUnload:];

UIImageView添加圆角

推荐一个QQ交流群:763164022 !群内有最近整理出来的面试题,以及一些书籍学习资料!也是为了给大部分还在做iOS开发的朋友一个交流圈子!

上一篇下一篇

猜你喜欢

热点阅读