您的位置:首页 > 职场人生

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自动成员变量使用的是一种“懒加载机制”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: