iOS面试题总结(一)
2016-07-19 01:13
316 查看
面试题总结:
1.#import和#include的区别,@class代表什么?它有什么作用?
#import指令是#imclude的改进版本,#import确保引用的文件只会被引用一次,不会在递归包含中造成循环引用
#import会链入该头文件的全部信息,@class只是告诉编译器存在这么一个类而已,类定义啥的不知道,头文件中一般使用@class,而实现类里则用#import
2.OC使用什么机制来管理内存?
使用引用计数器机制,如果一个对象alloc或者retain则必使用相应的release或者autorelease,换句话就是谁retain,谁就release
3.assign和weak上使用的异同点
assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针!
4.一个viewController的生命周期大概经历了哪些过程?
init -> loadView(没有用xib创建视图)->viewDidLoad ->viewWillAppear->viewDidAppear->
viewWillDisappear->viewDidDisappear->viewDidUnload (内存警告的时候调用)
5.我们说的OC是动态运行时语言是什么意思?
多态,将数据类型的确定由编译推迟到了运行时,运行时机制简单来说就是直到运行时我们才确定一个对象的类别以及调用该类别指定的方法,多态,不同对象以自己的方式响应同一消息的能力,也可以说运行时机制是多态的基础
6.runloop和线程有什么关系?
一个runloop对应一个线程,如果想开启一条常驻线程,只需要在子线程中开启一个runloop,主线程的runloop是默认开启的,子线程的runloop需要手动开启
7.使用block时什么情况会发生引用循环,如何解决
__weak typeof(self) weakSelf = self
8.输入一段字符串转换成日期时间格式
NSString *dateString = @"20160717164225";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyyMMddHHmmss";
NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(@"%@",date);
9.用OC写一段冒泡程序
NSMutableArray *resultArr = [[NSMutableArray alloc] initWithObjects:@"3",@"6",@"4",@"8", nil];
for (NSInteger i=0; i<resultArr.count-1; i++) {
for (NSInteger j=0; j<resultArr.count-j-1; j++) {
NSInteger a = [resultArr[j] integerValue];
NSInteger b = [resultArr[j+1] integerValue];
if (a>b) {
NSString *indexStr = resultArr[j];
resultArr[j] = resultArr[j+1];
resultArr[j+1] = indexStr;
}
}
}
NSLog(@"%@",resultArr);
10.isa指针怎么用?
任何类的定义都是对象,isa是一个class类型的指针, 任何实例对象都有isa指针
对象(有isa指针)->它的类(isa指针)->该类的metaClass(元类)
类的super_class -> 父类(该类为根类则值为NULL)
metaClass(isa指针)->根metaClass:如果该metaClass是根 metaClass指向自身
metaClass的super_class -> 父metaClass :如果该metaClass是根metaClass 则指向该metaClass对应的类
OC为每个类定义生成了两个objc_class,一个普通的class,另一个就是metaClass,可以在运行期创建这两个objc_class,然后使用objc_addClass将class注册到运行时系统中,以此实现动态的创建一个新的类
11.category和entension的区别?
category,用于给class和subClass添加新的方法,有自己单独的 .h 和.m文件,用于添加新的方法,不能添加新的属性
extension常被称为匿名的category,用于给类添加新的方法,只作用于原始类,不作用于subClass,只能对有implementation源代码的类写extension,对于没有implementation源代码的类,比如framework class,是不可以的,extension可以给原始类添加新的方法,以及新的属性
12.@property的本质和协议中的属性有什么异同?
@property就是声明和实现与属性同名的set 和get方法,并且生成属性同名的加下划线的成员变量
协议中的属性只声明属性同名的set和get方法,如果添加了readOnly就只声明属性同名的get方法,@property自动成员变量使用的是一种“懒加载机制”
1.#import和#include的区别,@class代表什么?它有什么作用?
#import指令是#imclude的改进版本,#import确保引用的文件只会被引用一次,不会在递归包含中造成循环引用
#import会链入该头文件的全部信息,@class只是告诉编译器存在这么一个类而已,类定义啥的不知道,头文件中一般使用@class,而实现类里则用#import
2.OC使用什么机制来管理内存?
使用引用计数器机制,如果一个对象alloc或者retain则必使用相应的release或者autorelease,换句话就是谁retain,谁就release
3.assign和weak上使用的异同点
assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针!
4.一个viewController的生命周期大概经历了哪些过程?
init -> loadView(没有用xib创建视图)->viewDidLoad ->viewWillAppear->viewDidAppear->
viewWillDisappear->viewDidDisappear->viewDidUnload (内存警告的时候调用)
5.我们说的OC是动态运行时语言是什么意思?
多态,将数据类型的确定由编译推迟到了运行时,运行时机制简单来说就是直到运行时我们才确定一个对象的类别以及调用该类别指定的方法,多态,不同对象以自己的方式响应同一消息的能力,也可以说运行时机制是多态的基础
6.runloop和线程有什么关系?
一个runloop对应一个线程,如果想开启一条常驻线程,只需要在子线程中开启一个runloop,主线程的runloop是默认开启的,子线程的runloop需要手动开启
7.使用block时什么情况会发生引用循环,如何解决
__weak typeof(self) weakSelf = self
8.输入一段字符串转换成日期时间格式
NSString *dateString = @"20160717164225";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyyMMddHHmmss";
NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(@"%@",date);
9.用OC写一段冒泡程序
NSMutableArray *resultArr = [[NSMutableArray alloc] initWithObjects:@"3",@"6",@"4",@"8", nil];
for (NSInteger i=0; i<resultArr.count-1; i++) {
for (NSInteger j=0; j<resultArr.count-j-1; j++) {
NSInteger a = [resultArr[j] integerValue];
NSInteger b = [resultArr[j+1] integerValue];
if (a>b) {
NSString *indexStr = resultArr[j];
resultArr[j] = resultArr[j+1];
resultArr[j+1] = indexStr;
}
}
}
NSLog(@"%@",resultArr);
10.isa指针怎么用?
任何类的定义都是对象,isa是一个class类型的指针, 任何实例对象都有isa指针
对象(有isa指针)->它的类(isa指针)->该类的metaClass(元类)
类的super_class -> 父类(该类为根类则值为NULL)
metaClass(isa指针)->根metaClass:如果该metaClass是根 metaClass指向自身
metaClass的super_class -> 父metaClass :如果该metaClass是根metaClass 则指向该metaClass对应的类
OC为每个类定义生成了两个objc_class,一个普通的class,另一个就是metaClass,可以在运行期创建这两个objc_class,然后使用objc_addClass将class注册到运行时系统中,以此实现动态的创建一个新的类
11.category和entension的区别?
category,用于给class和subClass添加新的方法,有自己单独的 .h 和.m文件,用于添加新的方法,不能添加新的属性
extension常被称为匿名的category,用于给类添加新的方法,只作用于原始类,不作用于subClass,只能对有implementation源代码的类写extension,对于没有implementation源代码的类,比如framework class,是不可以的,extension可以给原始类添加新的方法,以及新的属性
12.@property的本质和协议中的属性有什么异同?
@property就是声明和实现与属性同名的set 和get方法,并且生成属性同名的加下划线的成员变量
协议中的属性只声明属性同名的set和get方法,如果添加了readOnly就只声明属性同名的get方法,@property自动成员变量使用的是一种“懒加载机制”
相关文章推荐
- 你为什么找不到女朋友——致程序员
- 说说 IT 技术人的职业规划
- 硅谷女员工公开吐槽工资低被开除 但这只是开始(很现实的情况,但我觉得要归咎于房租太贵,以及自己的职业生涯计划不合理)
- Java面试参考指南——同步
- 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?
- 剑指offer之面试题22:二叉搜索树的后序遍历序列
- 数组循环移位
- MyBatis面试题
- 面试相关知识收集
- 国内一线互联网公司内部面试题库
- 面试,学会这些就足够啦!!!
- 十大必备面试问题 你知道多少???
- 转行做程序员之前你应该考虑的三件事
- 程序员接私单怎么接?,流程,报价。
- 转行做程序员之前你应该考虑的三件事
- Java JVM 请别拿“String s=new String("z");创建了多少实例”来面试 [ 转载 ]
- 常见的面试题总结
- 【面试总结】初探CLR
- PHP程序员进阶学习书籍参考指南
- 面试题:阐述Handler的实现原理