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改变时候
- iOS知识梳理
- iOS 知识梳理-内存
- 知识梳理
- 知识梳理
- 知识梳理
- 知识梳理
- 知识梳理
- 关于iOS uinavigationcontroller及Uitabbarcontroller知识的梳理
- 知识梳理--查询
- plsql知识梳理-连接
- plsql知识梳理-视图
- plsql知识梳理-序列
- plsql知识梳理-约束
- plsql知识梳理-索引
- activemq知识梳理
- HTML知识梳理
- 数据库知识梳理
- MySql数据库 知识梳理
- Mysql子查询使用limit
- 微信开发常用技巧(3)-微信ios返回为静态返回,防止微信做缓存
- 卷积神经网络(五)
- RAC 环境下的恢复问题 -- 恢复时应用归档日志的问题
- c++关于类的访问修饰符pubilc
- iOS知识梳理
- Node+OCR(图像文字识别)
- 防止缓存的方式一添加版本号(URL添加随机数)
- 学习笔记:正则表达式
- Unity打包ipa
- servlet在后台获取不到值的原因
- Where art thou
- 复杂网络之无标度网络的界限
- js实现获取上一个月的一天,和最后一天