iOS常见的面试题总结

1.   简述OC中内存管理机制

oc中的内存管理机制是自动引用计数,它分为两种方式:MRC和ARC,MRC是手动管理内存,ARC是系统自动管理内存;他的原则是谁开辟谁释放,有开辟就要有销毁

2.   readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?

Readwrite:读写特性,可读可写(是默认属性)

Readonly:只读,只有getter没有setter

Assign:修饰一些基本的数据类型(int  char  float double)和id类型

Retain:修饰一些计数类型

Copy:一般修饰字符串类型

Nonatomic:非原子性,不需要考虑线程的安全,执行效率高

Atomic:原子性的,优点就是线程是安全的,但是执行的效率低

3.    关于iOS 多线程问题

多线程有三种方式:NSThread、NSOperationQueue、GCD

NSThread:是比较轻量级的线程,需要自己管理线程内地生命周期,线程的同步

NSOperationQueue:是一个操作队列,用来管理Operation对象的执行,会根据需要自动开辟合适数量的线程去执行任务

GCD:是比较常用的一种线程,可以分为三种:主线程队列,并行队列和串行队列

4.提升UITableView性能的几点建议

a.使用懒加载,什么时候使用,什么时候初始化并开辟内存空间,减少内存的占用

b.自定义cell的高度

c.cell的重用机制,给cell添加重用标识符

5.线程同步和异步的区别?

同步:一个线程要等待上一个线程执行完后才能执行当前的线程

异步:就是可以同时执行多个线程

6.堆和栈的区别?

栈区:是由编译器自动分配释放的,主要存放一些函数的参数值,局部变量的值,顺序是先进后出

堆区:是由程序员分配释放,顺序是先进先出

全局区(静态区):初始化的全局变量和静态变量放在一个区域,未初始化的放在相邻的区域,程序运行结束后,有系统进行释放

文字常量区:存放常量字符串,程序结束后有系统释放

程序代码区:存放函数体的二进制文件

7.iOS类是否可以实现多继承?

不可以实现多继承,可以通过delegate和protocol和类别来实现类似多继承

8.iOS本地数据存储都有哪几种方式?iOS如何实现复杂对象的存储?

文件写入,对象归档,SQLite,coreData,NSUserdefault

文件写入:永久的保存在磁盘中,只支持NSString,NSData,NSArray,NSDictionary

对象归档:就是给对象数据进行加密,确保数据的安全性,自定义的对象归档必须遵循NDCoding协议

SQLite:数据库需要注意的是FMDB不是数据库,而只是数据库的管理框架

9.iOS的动态性

动态类型:一般使用的都是id类型,也就是当程序运行时,才能判断具体的类型

动态绑定:就是当程序运行时,根据需要调用相应的方法

动态载入:程序运行时,根据需求加载相对应的模块

10.深拷贝和浅拷贝的理解?

深拷贝,拷贝的是内容,浅拷贝拷贝的指针;两者的区别就是查看对象的地址是否有改变,如果有改变就是深拷贝

11.什么是安全释放

在对象dealloc中release之后再将指针置为nil

12.怎样实现一个singleton。

+ (ZMYSingleton *) sharedInstance{

static LOSingleton *sharedInstance = nil ;

static dispatch_once_t onceToken;  // 锁

dispatch_once (& onceToken, ^ {

// 最多调用一次

sharedInstance = [[ZMYSingleton alloc] init];

});

return  sharedInstance;

}

13.Runloop是什么?

一个runloop是一个事件处理的循环,经常在线程中使用,当开辟一个线程时就会有一个runloop,主线程的runloop默认是开启的,手动开辟的子线程runloop默认是不开启的,如果需要开启就要调用API[[NSRunloop  currentRunloop] run]开启。最常见的需要开启的runloop是在子线程里面调用计时器NSTimer

14.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?

#define kMIN(X,Y) ((X) > (Y)) ? (Y) :(X)

15.简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?

进入后台生命周期走:(将要进入后台,已经进入后台)

- (void)applicationWillResignActive:(UIApplication*)application;

- (void)applicationDidEnterBackground:(UIApplication*)application;

回到前台生命周期走:(将要进入前台,已经进入前台)

- (void)applicationWillEnterForeground:(UIApplication*)application;

- (void)applicationDidBecomActive:(UIApplication*)application;

16.ViewController的loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调 用的?在自定义ViewController的时候这几个函数里面应该做什么工作?

loadView:加载视图时调用

viewDidLoad:试图加载完成后调用

viewWillAppear:试图即将出现的时候调用

viewDidUnload:<iOS6之后废弃>当系统内存不足时会调用该方法,释放掉当前未在window中显示的试图和对应的控制器

17.描述应用程序的启动顺序。

1、程序入口main函数创建UIApplication实例和UIApplication代理实例

2、在UIApplication代理实例中重写启动方法,设置第一ViewController

3、在第一ViewController中添加控件,实现对应的程序界面。

18.为什么写代理的属性都是assign而不是retain?请举例说明。

代理属性使用assign是为了防止循环引用,如self.delegate = self

19.UIImage初始化一张图片有几种方法?简述各自的优缺点。

a.从资源读取,就是图片是从缓存中获取的,首先要先判断缓存中是否有这个图片,没有的话要将图片添加到缓存中在使用,有的话就可以直接使用,但是缺点是执行的效率比较低

b.从手机本地读取,需要&#16;获取图片的存储路径,执行效率高,但是用起来比较繁琐

20.这段代码有什么问题吗:

@implementation Person

- (void)setAge:(int)newAge {

self.age = newAge;

}

@end

死循环

21.用OC写一个冒泡排序

NSMutableArray*array = [NSMutableArray arrayWithArray:@[@"3",@"1",@"10",@"5",@"2",@"7",@"12",@"4",@"8"]];

for (int i =0; i < array.count;i ++) {

for (intj =0; j < array.count -1 - i; j++) {

if([[arrayobjectAtIndex:j]integerValue] > [[arrayobjectAtIndex:j +1]integerValue]) {

[arrayexchangeObjectAtIndex:jwithObjectAtIndex:j +1];

}

}

}

NSLog(@"%@",array);

22.简述你对UIView、UIWindow和CALayer的理解

UIView继承于UIResponder, UIResponder继承于NSObject,UIView可以响应用户事件,而CALayer做不到这一点;UIView侧重于内容的管理,CALayer侧重于对内容的绘制,对内容进行一些动画处理

(生活中的例子:墙上的照片)

23.frame和bounds区别:

frame: 该view在父view坐标系统中的位置和大小。(参照点是,父视图的坐标系统)

bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统)

本地 坐标系统的关键就是要知道的它的原点(0,0)

24.写一个完整的代理

25.分析json、xml的区别?json、xml解析方式的底层是如何处理的?

xml是一种标签语言,适用于web传输

json是一种比较轻量级的数据交换格式,使用AFNetworking进行json数据解析;优点是兼容性很高,可读性,完全独立于语言文本格式

26.ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?

didReceiveMemoryWarning在出现内存警告的时候执行该方法,默认操作就是释放掉暂时没使用的可重用的对象。

27.面向对象的三大特征,并作简单的介绍

封装:把客观的事物封装成抽象的类,隐藏它的内部实现,只提供接口

继承:可以使用现有类的所有功能

多态:不同的对象使用自己的方法去响应相同的消息

28.简单的说一下懒加载

懒加载就是什么时候使用,什么时候创建,开辟内存,这样可以减少内存的占用

29.分别描述类目(categories)和延展(extensions)是什么?以及两者的区别?继承和类目在实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?

类目:就是在不知道源码的情况下为一个类扩展方法

延展:为一个类声明私有方法和变量

类目的作用就是为已知的类添加方法

30. #import、#include和@class有什么区别

#import与#include都是查看类中的方法,#import是确保头文件只能引入一次,不会引起交叉编译

@class对一个类进行声明,告诉编译器有这个类,但是类中的定义什么都不知道,

@class比#import的编译效率高,它俩的主要区别是解决引用死锁的问题

31.谈谈你对MVC的理解?为什么要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其他的OC设计模式或别的设计模式吗?

MVC是一种设计模式,也就是model-view-controller,model是数据模型,view是现实内容,controller相当于是model与view之间的桥梁,它可以将model中的数据在view上显示出来

使用MVC可以提高代码的重用性,便于代码后期的维护与更新

常用的设计模式是:delegate,单例,target-action设计模式

32.字符串替换方法:

[string stringByReplacingOccurrencesOfString:@"png" withString: @""]

33.对于语句NSString* testObject = [[NSData alloc] init];       testObject 在编译时和运行时分别是什么类型的对象?

编译的时候是NSString类型,运行的时候是NSData类型

34.什么是沙盒(sandbox)?沙盒包含哪些文件,描述每个文件的使用场景。如何获取这些文件的路径?如何获取应用程序包中文件的路径?

沙盒:是指程序的系统文件存储的区域,包含三个文件:Documents,Library和tmp

Documents:存放浏览的文件

Library:存放缓存文件(退出应用不会被删除)

tmp:存放临时文件(退出程序会被删除)

35.    isKindOfClass、isMemberOfClass作用分别是什么?

两者的作用都是检测一个对象是否是一个类的成员,不同的是isKindOfClass还可以检测一个对象是否派生自该类的类的成员

36.TCP:是传输控制层协议,是面向连接的,可靠的,基于字节流的运输层;(遵循三次握手原则:给服务器发送消息时,会原路返回一条消息,告诉对方数据已经接收到,然后再返回一条消息,告诉对方也收到了数据,证明这条线路是安全的)

37.static关键字的作用

静态全局变量

static标记的变量会存储到全局变量区,生命周期与程序相同

只在声明的类中可见,并且在声明的类结束后,再次使用的还是之前的值

优点:

节省内存。静态变量只存储一次,可以被所有对象使用,值可以更新,对象可以直接访问到更新后的值

42.应用层有8层:

Telnet协议、FTP文件传输协议、超文本传输协议(HTTP)、SMTP简单邮件传输协议、时间协议、DNS、SNMP简单网络管理协议、TFTP简单的文件传输协议

43.iOS系统框架分为几层?

iOS系统框架分为4层:触摸层(Cocoa Touch),媒体层(Media),核心服务层(Core Services),核心操作系统层(Core OS)

触摸层:是iOS设备上的触摸交互操作,一般程序框架都是在触摸层

媒体层:在应用中使用媒体文件,进行音频,视频,以及动画效果的实现

核心服务层:可以访问iOS中的一些服务

核心操作层:就是实现一些内存管理,文件管理和电源管理等系统的操作

时间: 2024-10-05 20:47:41

iOS常见的面试题总结的相关文章

iOS开发工程师笔试题

iOS开发工程师笔试题 分类: IOS 面试题2013-01-17 10:28 820人阅读 评论(0) 收藏 举报 随着iOS平台开发的职位的增加,笔试.面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适合于面试新人,答案是我自己答的,不准确的地方,欢迎指出. 1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承:可以实现多个接口,通过实

iOS开发-基础面试题(一) 分类: 面试题

iOS开发-基础面试题(一) 1.Difference between shallow copy and deep copy??浅复制和深复制的区别?? 答:浅层复制:只复制指向对象的指针,而不复制引用对象本身.?深层复制:复制引用对象本身.?意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源?还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们

iOS知识点、面试题 之二

最近面试,发现这些题个人约到的几率打一些,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cnblogs.com/xujiahui/p/6025830.html 不足之处望见谅. 之二: 1.怎么样适配ios系统和ios屏幕 ios适配系统代码写法[[UIDevice currentDevice] systemVersion] 和NSFoundationVersionNumber

HTML5常见的面试题,基础知识点

                                                                                HTML5常见的面试题 一.HTML 常见题目 01.Doctype作用?严格模式与混杂模式如何区分?它们有何意义? 02.HTML5 为什么只需要写 <!DOCTYPE HTML>? 03.行内元素有哪些?块级元素有哪些? 空(void)元素有那些? 04.页面导入样式时,使用link和@import有什么区别? 05.介绍一下你对浏

常见Android面试题及答案(详细整理)

常见Android面试题及答案(详细整理) 1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy(). onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问. onStart(): Activity变为在屏幕上对用户可见时调用. o

iOS常见crash问题及crash日志分析

第一.iOS常见crash问题 1.插入空元素 对于NSMutableArray.NSMutableDictionary.NSMutableSet等可变的对象,插入空元素时crash 正确做法是加判断,sample code如下所示: NSDictionary *dic; NSMutableArray *arr=[NSMutableArray new]; if (dic) { [arr addObject:dic]; } NSLog(@"%@",arr); 加非空的判断条件: if(d

实现ios常见菜单效果的思路

目前见过的实现边侧菜单的效果,比较流行的有以下三种:(效果图) 1.菜单栏覆盖在部分主视图上 附上实现该效果的一个不错的源码地址: http://code4app.com/ios/RNFrostedSidebar/524399706803fa3c33000001 (1)最开始要实现这个效果,我想最简单的方式就是:添加UIView,加上一个self.view大小的子视图,菜单列表以外的区域设为透明灰色.后来发现,如果当前的控制器有显示导航栏或者工具栏,这个子视图就无法遮盖住导航栏或者工具栏上面的按

Android常见笔试&amp;面试题

一.JAVA部分: (挂起) 二.Android部分: 1.Android系统的架构 2.Android常用的五大布局 3.Android四大组件是什么 4.Activity的生命周期 5.Activity的四种启动模式 6.Service的启动方式有几种,有什么区别 7.BroadCastReceiver的使用机制 8.谈一谈Handler的工作机制 9.Service运行在哪个线程中 10.两个子线程中如何通过Handler来进行通讯 11.对于不同分辨率屏幕适配你是怎么做的 12.怎样彻底

上星期IOS的一个面试题。

美丽说面试题 1,IOS是怎样进行内存管理的,什么是ARC. 2,声明Property时,assign,nonatomic,readonly,retain,copy(各什么意思,括号里没打印出来,我猜得) 3,delegate需要retain吗? 4,什么是designated initlalizer?执行[super init]后会发生什么事? 5,isKindOfClass和isMemberOfClass有什么区别? 6,简述UIViewController的生命周期,比较重要的几个方法分别