iOS面试题目
1.请简述UIView与CALayer有什么不同。
2.Block什么情况下会保留实体内引用到外部对象,什么时候要用__block或__weak ?
3.NSDictionary类使用了哪些数据结构和算法?
4.类别跟扩展的区别?
1:类别是类的扩展,只可以声明方法,不可以声明变量。并且,类别的方法优先级较高,可覆盖原类方法。
2:类别的方法中,不可以调用super方法。--类别的局限
3:category 方法可能会覆盖于同一个类class 的其它 category 中的方法。但也可能被覆盖,因为不法预知他们的加载优先顺序,出现这种情况通常会在编译时出错。如果在一个开发的SDK中使用了类别, 就最好保证类别名不同于使用者的类别名, 以及类别方法也不同于使用者的类别方法名, 通常通过加前缀来做到。
使用类别:
1。对框架提供类的扩展(没有源码,不能修改)。
2。 不想生成一个新的子类的情况下,比如对 NSArray 的扩展。
3。 方便做项目管理,可以将一份源码在多个地方共享或者做方法版本管理、多人协作开发、用本地版本替换公共版本实现。
某些情况下,我们需要声明一个@property,它对外是只读的(readonly),而对内是可读写的(readwrite),这时,可以通过Extensions实现
4.NSString
4.类方法、实例方法与Runtime特性的联系?
5.block调用时,变量的生命周期有哪几种,分别是什么样的?
6.CALayer的多个Sub layer的数据结构,以及重绘顺序?
7.你有多少种方法为UIImage添加一个圆角
8.CoreAnimation是如何开始和结束显示动画?
9.如何把NSArray里NSNumber对象以顺序或反序排序?
10.如何从Core-Data数据库取数据?
11.Core-Data是线程安全吗,如不是,可以怎样做才可以是线程安全?
12.如何实现asynchronous dispatch block?
14.view第一次起动时的生命周期是什么呢?重载(reoload)及移除(remove)时生命周期又是什么?
15.UITableView及UICollectionView有什么区别?
16.动态绑定
17.在ARC的情况下,容易造循环引用的情况有哪些?
18.怎么理解MVVM,在cocoa中MVVM如何实现?
19.给定一个单向链表,求出该链表倒数第m个元素(m>0)
struct Item{
int iValue;
Item *pNext;
};
Item setIttem(Iitem *item,int m);
20.非递归实现折半查找数据元素x
int serach(int a[],int x, int low,int high){
int mid;
if(low>high) return -1;
while(low <= high){
mid = (low +high)/2;
if(x == a[mid]) return mid;
else if(a[mid]
else if (a[mid]>x) high = mid -1;
}
return -1;
}
21.MVC优点不正确的是?
A.低耦合性,B.高重用性和可适用性 C、较低的生命周期成本 D、代码高效率
22.下面哪个方法不属于NSObject和内省(Instrospection)方法?
A、inti, B、isKindOfClass C、responseToselector D、isMemberOfClass
23.OC中线程中描述不正确的是?
A.使用NSThread创建、使用GCD的dispatch
B.直接使用NSOperation,然后将其加NSOperatinQueue;
C.在主线程执行代码,方法时performSelectorOnMainThread
D.如果想延时执行代码可以用performSelector:onThread:withObject:wainUtilDone:
24.
iPhone5分辨率320*568,像素640*1136 @2x
iPhone6分辨率375*667,像素375*1334 @2x
iPhone6 Plus分辨率414*736,像素1242*2208 @3x(注意这个分分辨率下渲染后,图像
等比降低pixel分辨率至1080p(1080*1920)