一些iOS面试题及简要回答

36 篇文章 1 订阅
32 篇文章 0 订阅

文章链接:https://blog.51cto.com/brilliantfuture/1420170

  1. #import 跟#include、@class有什么区别?#import<> 跟 #import”"又什么区别?
    1> #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次

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

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

  1. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?
    1> readwrite:同时生成get方法和set方法的声明和实现

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

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

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

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

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

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

2> 运行时是NSData类型

  1. 常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?
    1> 常用OC类型:NSString、NSArray、NSDictionary、NSData、NSNumber等

2> OC对象需要手动管理内存,C的基本数据类型不需要管理内存

  1. id 声明的变量有什么特性?

id声明的变量能指向任何OC对象

  1. Objective-C如何对内存管理的,说说你的看法和解决方法?
    1> 每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁

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

3> 还可以通过autorelease pool管理内存

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

  1. 内存管理的几条原则时什么?按照默认法则.哪些方法生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
    1> 只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者autorelease

2> 只要调用了retain,都必须在最后调用一次release或者autorelease

3> @property如果用了copy或者retian,就需要对不再使用的属性做一次release操作

4> 如果用了ARC,另外讨论

  1. 线程和进程的区别?
    1> 一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间

2> 要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务

3> 一个进程中允许开启多条线程,也就是同时执行多个任务

  1. 堆和栈的区别?
    1> 堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存

2> 栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存

  1. 为什么很多内置的类,如TableView的delegate的属性是assign不是retain?
    1> tableView的代理一般都是它所属的控制器,控制器会对它内部的view做一次retain操作

2> 假设tableView也对代理(控制器)做一次retain操作,那么就出现循环retain问题

  1. 定义属性时,什么情况使用copy、assign、retain?
    1> copy:NSString、Block等类型

2> assign:基本数据类型

3> retain:OC对象类型

  1. ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?
    1> loadView

当第一次使用控制器的view时,会调用loadView方法创建view

一般在这里自定义view

2> viewDidLoad

当控制器的view创建完毕时会调用,也就是在loadView后调用

一般在这里添加子控件、初始化数据

3> viewDidUnload

当控制器的view因为内存警告被销毁时调用

一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)

文章到这里就结束了,你也可以私信我及时获取最新资料以及面试相关资料。如果你有什么意见和建议欢迎给我留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值