详细解析几个和网络请求有关的类(二十四) —— NSOutputStream(一)

版本记录

版本号 时间
V1.0 2018.03.19

前言

我们做APP发起网络请求,一般都是使用框架,这些框架的底层也都是苹果的API,接下来几篇就一起来看一下和网络有关的几个类。感兴趣的可以看上面几篇文章。
1. 详细解析几个和网络请求有关的类 (一) —— NSURLSession
2. 详细解析几个和网络请求有关的类(二) —— NSURLRequest和NSMutableURLRequest
3. 详细解析几个和网络请求有关的类(三) —— NSURLConnection
4. 详细解析几个和网络请求有关的类(四) —— NSURLSession和NSURLConnection的区别
5. 详细解析几个和网络请求有关的类(五) —— 关于NSURL加载系统(一)
6. 详细解析几个和网络请求有关的类(六) —— 使用NSURLSession(二)
7. 详细解析几个和网络请求有关的类(七) —— URL数据的编码和解码(三)
8. 详细解析几个和网络请求有关的类(八) —— 处理重定向和其他请求更改(四)
9. 详细解析几个和网络请求有关的类(九) —— 身份验证挑战和TLS链验证(五)
10. 详细解析几个和网络请求有关的类(十) —— 理解获取缓存(六)
11. 详细解析几个和网络请求有关的类(十一) —— Cookies和自定义协议(七)
12. 详细解析几个和网络请求有关的类(十二) —— URL Session的生命周期(八)
13. 详细解析几个和网络请求有关的类(十三) —— NSURLResponse(一)
14. 详细解析几个和网络请求有关的类(十四) —— NSHTTPCookie(一)
15. 详细解析几个和网络请求有关的类(十五) —— NSHTTPCookieStorage(一)
16. 详细解析几个和网络请求有关的类(十六) —— NSURLCache(一)
17. 详细解析几个和网络请求有关的类(十七) —— NSCachedURLResponse(一)
18. 详细解析几个和网络请求有关的类(十八) —— NSURLAuthenticationChallenge(一)
19. 详细解析几个和网络请求有关的类(十九) —— NSURLProtectionSpace(一)
20. 详细解析几个和网络请求有关的类(二十) —— NSURLCredential(一)
21. 详细解析几个和网络请求有关的类(二十一) —— NSURLCredentialStorage(一)
22. 详细解析几个和网络请求有关的类(二十二) —— NSStream(一)
23. 详细解析几个和网络请求有关的类(二十三) —— NSInputStream(一)

回顾

上一篇讲述了NSInputStream这个类的详细信息以及一些注意要点,下面这篇我们就主要看一下NSOutputStream


Overview

NSOutputStreamCore Foundation的CFWriteStreamRef是“toll-free bridged”。 有关toll-free bridged的更多信息,请参阅Toll-Free Bridging。

下面看一下该类的基本信息。

详细解析几个和网络请求有关的类(二十四) —— NSOutputStream(一)_第1张图片

Subclassing Notes

NSOutputStream是NSStream的一个具体子类,可让您将数据写入流。 尽管NSOutputStream对于大多数需要此功能的情况来说可能已足够,但是如果您需要更专业的行为(例如,您想记录流中数据的统计信息),则可以创建NSOutputStream的子类。

Methods to Override - 重写的方法

要创建NSOutputStream的子类,您可能必须为所支持的流数据类型实现初始化程序,并适当地重新实现现有初始化程序。 您还必须提供以下方法的完整实现:

  • write:maxLength:

从当前写入指针开始,从客户端提供的缓冲区(第一个参数)调用maxLength:参数中指定的字节数,然后将它们放到流中。 缓冲区必须是第二个参数指定的大小。 为了准备下一个操作,将写入指针偏移写入的字节数。 根据当前操作的结果返回一个有符号的整数:

1)如果写操作成功,则返回放入流中的实际字节数。
2)如果流的长度固定并已达到其容量,则返回0。
3)如果写入流时发生错误,则返回-1。

  • hasSpaceAvailable

如果数据流当前可以接受更多数据,则返回YES;如果数据流不能,则返回NO。 如果您希望与NSOutputStream在语义上兼容,如果必须尝试写入以确定空间是否可用,请返回YES。


Topics

1. Creating Streams - 创建流

  • + outputStreamToMemory

    • 创建并返回一个初始化的输出流,该流数据写入内存。
  • + outputStreamToBuffer:capacity:

    • 创建并返回一个初始化的输出流,该流数据写入提供的缓冲。
  • + outputStreamToFileAtPath:append:

    • 创建并返回一个初始化的输出流,该流数据写入指定的文件。
  • + outputStreamWithURL:append:

    • 创建并返回一个初始化的输出流,该流数据写入指定的URL。
  • - initToMemory

    • 返回一个将写入内存的输出流。
  • - initToBuffer:capacity:

    • 返回一个将写入指定缓冲的输出流。
  • - initToFileAtPath:append:

    • 返回一个将写入指定文件的输出流。
  • - initWithURL:append:

    • 返回一个将写入指定URL的输出流。

2. Using Streams - 使用流

  • hasSpaceAvailable

    • 一个布尔值,指示是否可以写入接收者。
  • - write:maxLength:

    • 将提供的数据缓冲区的内容写入接收器。

API

1. NSOutputStream本类

NSOutputStream是表示写入流的基本功能的抽象类。 子类需要实现这些方法。

// NSOutputStream is an abstract class representing the base functionality of a write stream.
// Subclassers are required to implement these methods.
@interface NSOutputStream : NSStream
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;
    // writes the bytes from the specified buffer to the stream up to len bytes. Returns the number of bytes actually written.

@property (readonly) BOOL hasSpaceAvailable;
    // returns YES if the stream can be written to or if it is impossible to tell without actually doing the write.

- (instancetype)initToMemory NS_DESIGNATED_INITIALIZER;
- (instancetype)initToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithURL:(NSURL *)url append:(BOOL)shouldAppend API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)) NS_DESIGNATED_INITIALIZER;

@end

2. NSOutputStream分类NSOutputStreamExtensions

// The NSOutputStreamExtensions category contains additional initializers and convenience routines for dealing with NSOutputStreams.
@interface NSOutputStream (NSOutputStreamExtensions)

- (nullable instancetype)initToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;

+ (instancetype)outputStreamToMemory;
+ (instancetype)outputStreamToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity;
+ (instancetype)outputStreamToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;
+ (nullable instancetype)outputStreamWithURL:(NSURL *)url append:(BOOL)shouldAppend API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

@end

后记

本篇主要讲述了类NSOutputStream的基本信息和接口使用,喜欢的给个赞或者关注,谢谢~~~

详细解析几个和网络请求有关的类(二十四) —— NSOutputStream(一)_第2张图片

你可能感兴趣的:(详细解析几个和网络请求有关的类(二十四) —— NSOutputStream(一))