IOS面试笔记题

1.#import 跟# include,@class 有什么区别?# import""和# import<>又有什么区别?

#import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次

@class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题

#import <>用来包含系统自带的文件,#import“”用来包含自定义的文件

2.属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在那种情况下用?

readwrite:同时生成get方法和set方法的声明和实现

readonly:只生成get方法的声明和实现

assign:set方法的实现是直接赋值,用于基本数据类型

retain:set方法的实现是release旧值,retain新值,用于OC对象类型

copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型

nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)

3.对于语句NSString*obj = [[NSData alloc] init];,编译时和运行时obj分别是什么类型?

编译时是NSString类型

运行时是NSData类型

4.Objective-C如何对内存管理的,说说你的看法和解决方法?

每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁

通过retain可以让对象的计数器+1、release可以让对象的计数器-1

还可以通过autorelease pool管理内存

如果用ARC,编译器会自动生成管理内存的代码

5.Difference between shallow copyand deep copy?

浅拷贝于深度拷贝的区别?

浅拷贝:指针(地址)拷贝,不会产生新对象

深拷贝:内容拷贝,会产生新对象

6.What is advantage of categories? What is difference between implementing a category and inheritance?

categories 的优势是什么?它和inheritance有什么不同?

categories可以在不修改原来类模型的基础上拓充方法

categories只能扩充方法、不能扩充成员变量;inheritance可以扩充方法和成员变量

inheritance会产生新的类

7.Difference between categories and extensions

categories和extensions(类扩展)的区别?

分类是有名称的,类扩展没有名称

分类只能扩充方法、不能扩充成员变量;类扩展可以扩充方法和成员变量

类扩展一般就写在.m文件中,用来扩充私有的方法和成员变量(属性)

8.What are KVO and KVC?

什么是 KVO 和 KVC?

KVC是键值编码,可以通过一个字符串的key(属性名)修改对象的属性值

KVO是键值监听,可以监听一个对象属性值的改变

9.What is purpose of delegates?

代理的目的是什么?

两个对象之间传递数据和消息

解耦,拆分业务逻辑

10.What are mutable and immutable types in Objective C?

在 OC 里有那写是可变类和不可变类?

mutable是可变类型,比如NSMutableArray,可以动态往里面添加元素

immutable是不可变类型,比如NSArray,固定的存储空间,不能添加元素

11.What is push notification?

有那些推送?

本地推送:程序内部弹出通知到用户设备

远程推送:由推送服务器推送通知到用户设备

12.What is responder chain?

什么是响应链?

响应者链:

UIResponder有一个nextResponder属性,通过该属性可以组成一个响应者链,事件或消息在其路径上进行传递

如果UIResponder没有处理传给它的事件,会将未处理的消息转发给自己的nextResponder


IOS面试笔记题_第1张图片

13.Difference between frame and bounds?

fram 和 bounds 有什么不同?

frame以父控件的左上角为坐标原点

bounds以控件本身的左上角为坐标原点

你可能感兴趣的:(IOS面试笔记题)