基础题

2016-10-28  本文已影响8人  童星

block和weak的区别

  1. block可以修饰对象和基本数据类型
  2. weak只能修饰对象,也只能在ARC下使用
  3. block对象可以在block中被重新赋值,weak不可以

在单例中添加数组需要注意的问题

  1. 单例中添加可变数组的时候,要防止多个地方对它同时进行修改,需要加原子属性,并且用strong,并且写一个遍历和修改的方法,加上锁。lock unlock

http状态码

302: 请求重定向
500以上都是服务器错误
400以上都是请求链接或者找不到服务器
200以上是正确访问
100以上是请求接受成功

多线程

GCD
  1. dispatch_async

为了避免界面在处理耗时操作时卡死,比如读取网络数据,IO,数据库读写等,我们会在另一个线程中中处理这些操作,然后通知主线程刷新界面,用GCD实现这个流程的操作比NSOperation和NSThread都要简单,GCD会自动根据任务在多核处理器上分配资源,优化程序

  1. dispatch_group_async

可以实现监听一组任务是否完成,完成后得到通知(dispatch_group_notify)执行其他的操作。

3.dispatch_barrier_async
在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行
4.dispatch_apply
执行某个代码片段N次

dispatch_apply(5, globalQ, ^(size_t index) {
// 执行5次
});
NSOperationQueue

一个NSOperationQueue操作队列,就相当于一个线程管理器,而非一个线程。因为你可以设置这个线程管理器内可以并行运行的的线程数量等等

readonly,readwrite, retain, assign, weak, strong, copy, nonatomic

Set, Get方法

- (void)setName:(NSString*)name{
    if (name != _name) {//如果旧值和将要付给它的新值不相等的话,就给它赋新值,
        [name retain];//新值retain一次
        [_name release];//旧值release掉
        _name = name;//赋给新值
    }
}
- (NSString *)name{
    return  _name;
}

static关键字的作用

OBJC的内存管理

设计模式

类工厂方法

什么时候用delegate,什么时候用Notification?

答:delegate针对one-to-one关系,并且reciever可以返回值给sender,代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。*notification可以针对one-to-one/many/none,reciever无法返回值给sender.所以,delegate用于sender希望接受到reciever的某个功能反馈值,notification用于通知多个object某个事件

什么是KVC和KVO?答:

KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。KVO(Key-Value- Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名

TCP/UDP区别联系

socket连接和http连接的区别

简单说,你浏览的网页(网址以[http://开头)都是http协议传输到你的浏览器的,而http是基于socket之上的。socket是一套完成tcp,udp协议的接口。]
HTTP协议:简单对象访问协议,对应于应用层,HTTP协议是基于TCP连接的tcp协议:对应于传输层ip协议:对应于网络层TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的我们已经知道网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –>读写write/read –>关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭),这些函数我们在后面进行介绍。我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。1)Socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等等。而TCP和UDP协议属于传输层。而http是个应用层的协议,它实际上也建立在TCP协议之上。(HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。)2)Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。

利用Socket建立网络连接的步骤

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

什么是平衡二叉树?

左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1

上一篇 下一篇

猜你喜欢

热点阅读