导航模式/持久化

导航模式

平铺模式,一般由scrollView和pageControl组合而成的展示方式。手机自带的天气比较典型。

标签模式,tabBar的展示方式,这个比较常见。

树状模式,tableView的多态展示方式,常见的9宫格、系统自带的邮箱等展现方式。

持久化方式

属性列表文件 -- NSUserDefaults 的存储,实际是本地生成一个 plist 文件,将所需属性存储在 plist 文件中

对象归档  --  本地创建文件并写入数据,文件类型不限

SQLite 数据库 -- 本地创建数据库文件,进行数据处理

CoreData  --  同数据库处理思想相同,但实现方式不同

单元测试框架

OCUnit 是 OC 官方测试框架, 现在被 XCTest 所取代。

XCTest 是与 Foundation 框架平行的测试框架。

GHUnit 是第三方的测试框架。github地址

OCMock都是第三方的测试框架。github地址

7 层协议,tcp四层协议及如何对应的?

@private、@protected与@public三者之间的区别

@private只能够使用在声明的类当中,其子类也不能够使用用@private声明的实例变量;

@protected只能在声明的类当中使用,但其子类具有使用@protected声明变量的资格;

@public可以全局使用,属性是具有全局属性的;

在OC中,引用文件可以通过#include、#import、@class三种方式。

一. #include

1. 在C语言中,我们使用#include来引入头文件。使用#include “xx.h”来引入自定义的头文件,使用#include来引入库中的头文件。

2. #include不是不能防止重复引用头文件,而是操作起来比较复杂。

3. #include:为了防止重复引用可采用:

#ifndef  ViewController_h

#define ViewController_h

#endif

二. #import

1. #import是#include的升级版,可以防止重复引入头文件这种现象的发生。

2. #import在引入头文件的时候,就是完全将头文件拷贝到现在的文件中。所以也有效率上的问题。

3. #import最大的问题在于,需要避免出现头文件递归引入的现象。(如:A引入B,B引入A,那么A、B的头文件会互相不停的拷贝)

三.@class

1. @class用来告诉编译器,有这样一个类,使书写代码时,不报错。

但是@class只是使导入的类名在引用时不受影响,不能创建该类的对象,因为创建对象时也需要访问其内部方法。

2. 因为#import引入头文件有效率问题,所以,当还没有调用类中方法,仅仅是定义类变量的时候,使用@class来提醒编译器。而在真正需要调用类方法的时候,进行#import。

3. 如果A是B的父类,那么这是在B.h中就必须要使用#import来引入A的头,因为需要知道A类中有哪些变量和方法,以免B类中重复定义。

Socket

建立Socket通信是至少需要一对套接字, 其中一个是运行在我们的客户端上, 称为Client Socket, 还有一个是运行在服务器上, 称为Service Socket.

Socket之间的连接过程分为三个过程:

服务器监听、客户端请求、连接确认。

Socket同时支持TCP和UDP两种传输协议, 啥意思呢?

当Socket使用TCP协议通信的时候, Socket就是一个TCP的连接, 那么如果Socket使用的是UDP协议通信, 那么这时候的Socket就是UDP连接

网络的协议,从上往下分的话:

应用层、表达层、会话层、传输层、网络层、数据链路层、物理层。

但我们通常会把底下三层(网络层, 数据链路层, 物理层)统称为媒体层, 一般都是专门搞网络的网络工程师大神们研究的对象;而上面四层(传输层, 会话层, 表示层, 应用层)被称为主机层, 也是广大用户所面向和关心的内容。

HTTP:

HTTP协议: 它是对应着应用层.

TCP协议: 它是对应着传输层.

IP协议: 则对应着网络层.

而HTTP协议是基于TCP连接的, 所以三者根本就没啥可比性.

TCP/IP协议: 属于传输层协议, 主要解决数据如何在网络中传输.

HTTP协议: 属于应用层, 主要解决如何包装数据.

而Socket是应用层与TCP/IP协议族通信中间的软件抽象层, 是它的一组接口

TCP/IP五层模型

应用层、传输层、网络层、数据链路层、物理层。

物理层: 中继器, 集线器, 双绞线

数据链路层: 以太网交换机(Modem), 网卡(网卡有一半是工作在物理层)

网络层: 路由器, 三层交换机

传输层: 四层交换机, 路由器(也有一些特殊的路由器在传输层中工作)

其中TCP/IP的应用层比较特殊, 它是包含了会话层, 表达层, 应用层等功能, 这里要说一点, TCP/IP协议并不能在传输层总是保证可靠的传输数据包, 但七层模型可以做到.

TCP/IP还提供了另一种传输模式, 叫做UDP(用户数据报协议), 但这种协议不能保证可靠的数据包传输

TCP: 面向连接, 提供可靠的数据传输, 用于传输大量数据, 使用数据流模式, 速度慢, 建立连接时开销较大

UDP: 非面向连接, 传输不可靠, 用于传输少量的数据, 速度快。

TCP是一个数据流的模式协议, 而UDP是一种数据报模式的协议.

总的来说TCP是一个数据流的模式协议, 而UDP是一种数据报模式的协议。刚刚说了Socket是基于TCP/IP协议上的抽象, 也就是说Socket只是对TCP/IP的封装, 本身是没有协议的, 只有通过Socket API, 我们才能够使用TCP/IP协议。

沙盒

每个iOS程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。应用必须待在自己的沙盒里,其他应用不能访问该沙盒。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等。

沙盒中相关路径

AppName.app应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以不能在运行时对这个目录中的内容进行修改,否则会导致应用程序无法启动。

Documents/保存应用程序的重要数据文件和用户数据文件等。用户数据基本上都放在这个位置(例如从网上下载的图片或音乐文件),该文件夹在应用程序更新时会自动备份,在连接iTunes时也可以自动同步备份其中的数据。

Library:这个目录下有两个子目录,可创建子文件夹。可以用来放置您希望被备份但不希望被用户看到的数据。该路径下的文件夹,除Caches以外,都会被iTunes备份.

Library/Caches:  保存应用程序使用时产生的支持文件和缓存文件(保存应用程序再次启动过程中需要的信息),还有日志文件最好也放在这个目录。iTunes 同步时不会备份该目录并且可能被其他工具清理掉其中的数据。

Library/Preferences: 保存应用程序的偏好设置文件。NSUserDefaults类创建的数据和plist文件都放在这里。会被iTunes备份。

tmp/: 保存应用运行时所需要的临时数据。不会被iTunes备份。iPhone重启时,会被清空。

// 获取沙盒根目录路径NSString*homeDir=NSHomeDirectory();

// 获取Documents目录路径NSString*docDir=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject];/

/获取Library的目录路径NSString*libDir=[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES)lastObject];

// 获取cache目录路径NSString*cachesDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)firstObject];

// 获取tmp目录路径NSString*tmpDir=NSTemporaryDirectory();

// 获取应用程序程序包中资源文件路径的方法:NSString*bundle=[[NSBundle mainBundle]bundlePath];

你可能感兴趣的:(导航模式/持久化)