iOS 面试题

//几篇不错的面试题

https://blog.csdn.net/shifang07/article/details/79130794

1.写一个标准的宏MIN
#define MIN(A,B) ((A)<=(B)?(A):(B))

2.关键字volatile有什么含义
提醒变量随时有可能改变,获取变量的最新的值。

3.一个参数可以是const,还可以是volatile吗?一个指针可以是volatile吗?
(1)是的
就是说 这个参数程序不能改 但是外部硬件可以改
比如说 外部的一个寄存器 对于CPU来说是只读的 它的值就可以设置成这种类型
 (2)是的,指针可变的

4.列举几种进程的同步机制及优缺点
(1).信号机制:只能一次初值
(2).自锁 (自锁,过多占用CPU资源)

5.死锁的处理策略有哪些
•互斥(Mutual exclusion):存在这样一种资源,它在某个时刻只能被分配给一个执行绪(也称为线程)使用;
•持有(Hold and wait):当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源;
•不可剥夺(No preemption):执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源;
•环形等待(Circular wait):若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。

6.自动释放池是什么,如何工作
自动释放池是OC的一种内存自动回收机制,可以将自动释临时变量统一释放,自动释放池销毁的时候,池子会对所有的对象做一次release操作。

7.什么是沙盒模型,哪些操作属于私有API的范畴
沙盒模型:MyApp.app Doucument Library tmp
私有API是指存放在PrivateFrameworks框架总的API,是苹果明确不能使用的

8.在一个对象方法里面,self.name = "object" 和 name = "object"有什么不同
self.name = "object" 和 name = "object"有什么不同
self.name = "object" 会调用set方法 self.name引用计数会加1
name = "object" 会直接把object对象赋值给name,引用计数不变
9.属性readwrite,readonly,retain,assign,copy,nonatomic,weak.
readwrite:默认熟悉,可读写,生成set和get方法
readonly:只读属性,只生成get方法
retain:引用计数加1,先release再retain
assign:基本数据类型,如int,float等,解决循环引用问题
copy:set方法copy操作,减小上下文的依赖引入的机制
nonatomic:多线程提高性能
weak:,在ARC下的属性,弱引用,当对象消失后,指针设置为nil,用于UI控件
strong:在ARC下强引用,用于一般对象
10.NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?
编译时是nsstring, 运行时是nsdata
11.id声明的对象有什么特性
具有指向任何类型oc对象
12.OC如何内存管理的,说说你的看法和解决方法

 

 

 

Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。
13.atomic和nonatomic有什么区别
atomic :线程保护,耗费资源
nonatomic:执行效率高
14.OC创建线程的方法是什么?如果在主线程中执行,方法是什么?如果想延时代码,又是什么
(1)创建线程的三种方法:NSThread ,GCD ,NSOperation
  (2)主线程执行:performSlectorOnMainThread:withOb....
 (3)延时performSelector:onThread....
15.frame和bounds的区别
frame是以父视图在坐标中的位置和大小
bounds是以本地坐标中的位置和大小
16.方法和选择器有什么不同
选择器是方法的名字,通过它可以找到方法
方法是包含名字和实现
17.什么是延时加载
只有真正需要资源时,再去加载,节省了内存资源
18.深拷贝与浅拷贝
深拷贝就是内容拷贝,拷贝的值是一样的,内存地址不一样的新对象
浅拷贝就是指针拷贝,指向了一个新指针,并没有创建一个全新的对象
19.类别是什么?继承和类别有什么区别?
类别:是不用创建子类,可以直接创建方法
20.代理的作用
消息传递方式
21.我们说的OC是动态运行时语言时什么意思?
多态
22.通知和协议的不同之处
通知一对多,协议是代理的一种方式,一对一
23.给出委托方法的实例,并且说出UITableView的Data Source方法
保姆照顾小孩
 - (NSInterger)...numberOfRows...
- (UITableViewCell *)...
24.如何用Xcode设计通用应用
选择类型为universal,icon图标选择iPad iPhone 两种,适配两种类型
25.UIView的动画效果有哪些
(1).使用UIView类实现动画效果
  [UIView beginAnimation....] //开始动画
 [UIView commitAnimations] //提交动画
(2).使用UIView的动画代码块
block的形式,贞动画
[UIView animationWith...]
26.在iPhone 应用中如何保存数据
1.归档 2.NSUserDefaults 3.沙盒写入 4.SQLite
27.简单介绍NSURLConnection 类
1.NSURL对象,设置请求路径
2.传入NSURLRequest对象,设置请求头请求体
3.NSURLRequest发送请求
28.loadView、viewDidLoad及viewDidUnload的关系
一、loadView

1.什么时候被调用
每次访问UIViewController的View(如controller.view,self.view),而且View为nil,loadView就会被调用
2.有什么作用
loadView 方法是用来负责创建UIViewController的View
3.如何正确的使用这个方法
大家都知道UIViewController的View可以通过xib文件来创建的,但在某些情况下,xib不是那么的灵活,所以我们想通过代码来创建. 
 - (void)loadView { 
self.view = [[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
}
不需要调用 [super loadView],你调用了也不会出错,只是造成一些不必要的开销

二、viewDidLoad

1.什么时候被调用
无论你是通过xib文件还是重写loadView方法创建UIViewController的view,在View创建完毕时,最终都会调用ViewDidload方法
2.有什么作用
一般我们会在这里做界面上的初始化操作,比如
- (void)viewDidLoad
{
[super viewDidLoad];
//添加一个按钮

UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
[button addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
 }

三、viewDidUnload

1.什么时候被调用
  iOS 设备的内存是极其有限的,如果应用程序占用内存过多的话,系统会对应用程序发出警告,UIViewController就会收到didReceiveMemoryWarning的消息,view的superView为nib的时候,view就会被释放,并且调用viewDidUnload方法

2.有什么作用?
上面说到,发出内存警告且view被释放的时候就会调用viewDidUnload方法,所以一般在释放资源,主要是释放界面元素相关的资源,将相关的实例都赋值为nil

- (void)viewDidUnload {
2 [super viewDidUnload];
3 self.name = nil;
4 self.pwd = nil;
5 }
3.dealloc也是用来释放资源的,那跟viewDidUnload有什么关系?
当发出内存警告调用viewDidUnload方法时,只是释放了view,并没有释放UIViewController,所以并不会调用dealloc方法。即viewDidUnload和dealloc方法并没有任何关系,dealloc方法只会在UIViewController被释放的时候调用

四、三个方法的关系

1.第一次访问UIViewController的view时,view为nil,就会调用loadView方法创建的View
2.view创建完毕后就会调用viewDidLoad方法进行界面元素的初始化
3.当内存警告时,系统可能会释放UIViewController的view,将view赋值为nil,并且调用viewDidUnload
4.当再次访问UIViewController的view时,view已经被3中赋值为nil了,所以又会创建loadView方法的view
5.view创建完毕后,还是会调用viewDidLoad方法进行界面元素的初始化

 

 

https://mp.csdn.net/postedit/78132161

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值