好文章收藏夹

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

2018-03-19  本文已影响17人  刀客传奇

版本记录

版本号 时间
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 FoundationCFWriteStreamRef“toll-free bridged”。 有关toll-free bridged的更多信息,请参阅Toll-Free Bridging

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


Subclassing Notes

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

Methods to Override - 重写的方法

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

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

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

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


Topics

1. Creating Streams - 创建流

2. Using Streams - 使用流


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的基本信息和接口使用,喜欢的给个赞或者关注,谢谢~~~

上一篇下一篇

猜你喜欢

热点阅读