iOS知识梳理

来源:互联网 发布:故宫的淘宝店 编辑:程序博客网 时间:2024/06/04 18:51

代理相关

  • 代理又叫委托,是一种设计模式,代理是对象与对象之间的通信交互,代理解除对象之间的耦合性。
  • 改变传递控制链。允许一个类在某些特定时刻通知到其他类。而不需要获取到那些类的指针,可以减少框架复杂度
  • 回调
  • 代理属性常用weak修饰,防止循环引用。//self.tableView.delegate = self;

static self super关键字的作用

static 修饰的变量在内存中只被分配一次。函数体内的static变量作用域为该函数体,模块内的static变量作用域为该模块,可被模块内所有函数访问。但不能被模块外访问。在类中的static成员变量属于整个类所有,对类的所有对象只有一份深拷贝。
self 当前消息接受者
super 向父类发送消息

MVC是一种架构模式,Model View Controller

  • Model负责存储定义操作数据
  • View用来展示,和用户进行操作交互
  • Controller是Model和View的协调者。Controller把Model中的数据拿过来给View用。Controller可以直接与Model和View通信,而View不能和Controller直接通信。View与Controller通信需要利用代理协议方式,当有数据更新时,Model也要与Controller进行通信,这个时候就要用Notification和KVO,这个方式就像广播一样,Model发信号,Controller设置监听接受信号。Model和View不能直接通信,这样违背MVC设计模式

关于delegate和dataSource

首先Delegate是委托的意思,在oc中则是一个类委托另一个类实现某个方法。当一个对象接受到某个事件或者通知的时候, 会向它的Delegate对象查询它是否能够响应这个事件或者通知,如果可以这个对象就会给它的Delegate对象发送一个消息(执行一个方法调用)。

Datasource字面是数据源,一般和Delegate伴生,这时数据源处理的数据就是Delegate中发送委托的类中的数据,并通过Datasource发送给接受委托的类。

上面提到MVC,假设一个tableView是V1 Controller C1 Model M1
V1 通过代理和 C1通信(响应事件)
当M1有数据改变 通知到C1 C1再 影响V1显示
问题可不可以V1.dataSource = M1,似乎不行,违背MVC原则禁止M和V通信。可以让V1持有一个管理类负责处理dataSource。这样可以让controller不那么臃肿,注意到行高是delegate里的,可以让dataSource也遵循该协议,然后在V1的delegate方法中让dataSource调,这其实就是让dataSource作为Model 和 View的中介者了,以前是Controller。

include 和 import的区别, import 和 @class 区别

include 和 import 都是查询类中定义的行为
import只导入一次 不存在交叉编译问题
@class 是向前声明,告诉你有这么个类但是它的行为未知 得在.m 文件import才行
@class 可以解决编译死锁问题

解释id类型

任意类型对象 程序运行时才决定对象的类型

isMemberOf 和 isKindOf

都能检查是否是该类成员,后者还能检查是否是派生自该类的成员

Core Data的成员对象

  • NSManageObject :被管理的数据记录 Managed Object Model 是描述应用程序的数据模型,这个模型包含实体(Entity),特性(Property) 读取请求(FetchRequest)等
  • NSManageObjectContext:管理对象上下文,持久性存储模型对象,参与数据对象进行各种操作全过程,并检测数据对象的变化,以提供对undo/redo 的支持和绑定
  • NSPeristentStoreCoordinator:连接数据库的PersistentStoreCoordinator 相当于数据文件管理器,处理底层的数据文件的读取和写入,一般我们与这个没有交集
  • NSManageObjectModel:被管理的数据模型,数据结构
  • NSFetchRequest:数据请求
  • NSEntityDescription:表格实体结构,还需知道.xcodatamodel文件变异后为.momd或者.mom文件。

Core Data功能

解释 self = [super init]

容错处理,当父类初始化失败,会返回一个nil,表示初始化失败,由于继承关系,子类需要拥有父类的实例和行为,因此我们必须先初始化父类再初始化子类 ps:销毁的时候是反过来的。

使用block有什么好处?使用NSTimer写出一个使用block显示(在UILabel上)秒表的代码

  • 代码紧凑,传值回调放鞭,省去写代理的很多代码
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(...){_label.text = ...}[NSRunloop mainRunloop] addTimer:timer for mode:....commonmodes];

TCP和UDP的区别和联系

  • TCP为传输控制层协议,为面向连接 可靠地 点到点的通信
  • UDP为用户数据报协议,非连接的不可靠的到多点的通信
  • TCP侧重可靠传输,UDP侧重快速传输

TCP连接的三次握手

-第一次:客户端发送syn包(syn = j)到服务器,并进入SYN_SEND状态等待服务器确认
-第二次:服务器收到syn包,必须确认客户的SYN(ack = j+1),同时自己也发送一个SYN包,即使SYN+ACK包,此时服务器进入SYN+RECV状态
-第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次状态

Socket连接和HTTP连接的区别

HTTP协议是基于TCP连接的,是应用层协议,主要解决如何包装数据,Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议

HTTP连接:短连接,客户端想服务器发送一次请求,服务器响应后连接断开,节省资源。服务器不能主动给客户端响应(除非采用HTTP长连接技术),iPhone主要使用NSURLConnection

Socket连接:长连接,客户端跟服务器端直接使用Socket进行连接,没有规定连接后断开,因此客户端和服务器端保持连接通道,双方可以主动发送数据,一般多用于游戏Socket默认连接超时时间是30s,默认大小是8k(理解为一个数据包大小)

GET和POST区别

HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文
HTTP请求报文:请求行,请求头,空行,请求数据
HTTP响应报文:状态行,消息报头,响应正文
GET请求:参数在地址后拼接,没有请求数据,不安全,不适合传输大量数据(长度有限制,为1024个字节)

GET提交,请求的数据会附在URL之后,即把数据放置在HTTP协议头中。以?分割URL和传输数据,多个参数用&连接。如果数据是英文字母和数字,原样发送,如果是空格,转换为+,如果是中文或者其他字符,则把字符串用BASE64加密。( 我记得之前项目用了URLENCODE)

POST请求:参数在请求数据放着,相对GET请求更安全,并且数据大小没有限制,把提交的数据放置在HTTP包的包体中
GET提交的数据会在地址显示出来,而POST提交,地址栏不会改变。

传输数据的大小

GET提交时,传输数据就会收到URL长度限制,POST由于不是通过URL传值,理论上不受限制

安全性

POST安全性比GET高
通过GET提交数据,用户名和密码将明文出现在URL上,比如登录界面有可能被浏览器缓存。
HTTPS:安全超文本传输协议,它是一个安全通信通道,基于HTTP开发,用于客户计算机和服务器之间交换信息,使用安全套接字层(SSL)进行信息交换,即HTTP的安全版

APNS

app 请求Apple Sever AppleSever给app token,app将token传给 我们的服务器,服务器要发推送时候,把token和响应内容传给AppleSever AppleSever通过token传给手机

第三方的推送一般是当app在前台时候 用socket传推送,当app在后台的时候用APNS

网络七层协议

  • 应用层
    1 用户接口
    2 Application典型设备:网关
    3 典型协议 标准和应用 TELNET FTP HTTP

  • 表示层
    数据表示 压缩和加密presentation
    典型设备 网管
    典型协议 标准和应用 ASCLL PICT TIFF
    JPEG MPEG
    表示层相当于一个东西的表示,表示一些协议,比如图片声音和饰品MPEG

  • 会话层

  • 传输层
    TCP、UDP、SPX

  • 网络层
    路由器
    IP、IPX、APPLETALK、ICMP

  • 数据链路层
    交换机网桥 网卡
    802.2 802.3ATM

  • 物理层
    集线器 中继器

LayoutSubViews在什么时候被调用

Viwe的fram改变时候