1.GCD和NSOperation的工作原理
GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。
NSOperation的内部实现是基于GCD的,只不过多了一些实用的功能,更加面向对象。
2、如何解决TableView卡的问题?
2.1首先使用不透明度视图
2.2不要创建不必要的cell,可以使用重用cell
2.3减少视图的数目,可以用自定义cell
2.4不要阻塞主线程,采用多线程
3、单例的写法
.h文件定义一个方法+(instancetype) shareInstance ;
,m文件定义全局变量static Singleton* _instance = nil;
最后实现该方法
+(instancetype) shareInstance
{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init] ;
}) ;
return _instance ;
}
4、block和代理的,通知的区别
通知:一对多,很多控制器都需要知道一个事件,应该用通知;
代理:一对一,需要建立联系。对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;
block:写法更简练,不需要写protocol、函数等等,注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息
5.block如何防止循环引用
ARC下:使用__weak
__weak typeof(self) weakSelf = self;
[myBlock:^(){
[weakSelf doSomething];
}
]
MRC下:使用__block
__block typeof(self) weakSelf = self;
[myBlock:^(){
[weakSelf doSomething];
}
]
6.类别的作用
a.可以将类的实现分散到多个不同类或者不同框架中
b.创建私有方法的前向引用
c.向对象添加非正式协议
在不修改原有的类的基础上增加新的方法
一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作
7.类别和拓展的区别
延展也叫拓展,是类的匿名类别,所谓拓展就是为类额外添加没有的方法、变量和合成属性。
区别:
只有拓展可以添加属性,而且拓展的方法是必须实现的。
extensions被认为是一个私有的category
8.正式协议和非正式协议?
所谓的非正式协议就是类别,即凡是NSObject或其子类Foundation框架中的类增加的分类别,都是非正式协议。
创建一个NSObject的类别称为“创建一个非正式协议”。因为,NSObject是顶级父类,在NSObject中添加了该方法,也就是说通过继承关系,所有的类中都有该方法。****
正式协议是通过protocol指定的一些列方法的声明,然后由实现该协议的类自己去实现这些方法。而非正式协议是通过向NSObject中添加一个类别来实现,然后子类去继承NSObject。
不过,非正式协议已经渐渐被正式协议取代,正式协议最大的优点就是可以使用泛型约束,而非正式协议则不可以。
9.我们说的oc是动态运行时语言是什么意思?
讲数据类型的确定,有编译时,推行到了运行时。例如一匹马,只有跑起来(运行起来)的时候,才能确定它是不是千里马。(确定它是什么类型,千里马的类型)
10.什么是多态?
不同对象以自己的方式响应相同消息的能力就叫多态。个人理解,多态,多种姿态,
人和狗是不同对象,相同的消息说睡觉,人会睡在床上,狗却趴着地上。吃饭也一样,人和狗的姿态是不一样的.
11.frame和bounds有什么不同?
答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
网友评论