本文以及相关的系列文章是我总结的iOS网络开发方面的知识点,本文是第二篇,主要分析了Cocoa Streams中的几个重要类

Cocoa Streams实际上是Objective-C对CFNetwork的简单封装,主要包括了三个类:NSStream, NSInputStream, and NSOutputStream。本部分的接口接口比較简单,使用方法一目了然。

我在这里就仅仅列出接口,方便查阅。

对CFNnework不明确的看IOS研究之网络编程(一)-CFNetwork使用具体解释

NSStream接口例如以下:

@interface NSStream : NSObject
- (void)open;
- (void)close;

- (id <NSStreamDelegate>)delegate;
- (void)setDelegate:(id <NSStreamDelegate>)delegate;
// By default, a stream is its own delegate, and subclassers of NSInputStream and NSOutputStream must maintain this contract. [someStream setDelegate:nil] must restore this behavior. As usual, delegates are not retained.

- (id)propertyForKey:(NSString *)key;
- (BOOL)setProperty:(id)property forKey:(NSString *)key;

- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;

- (NSStreamStatus)streamStatus;
- (NSError *)streamError;
@end

@protocol NSStreamDelegate <NSObject>
@optional
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode;
@end

#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))//不能在ios上使用
@interface NSStream (NSSocketStreamCreationExtensions)
+ (void)getStreamsToHost:(NSHost *)host port:(NSInteger)port inputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream;
@end
#endif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@interface
NSStream :
NSObject  
- (void)open;  
-
(void)close;  
  
-
(id
<NSStreamDelegate>)delegate;  
- (void)setDelegate:(id
<NSStreamDelegate>)delegate;  
    // By default, a stream is its own delegate, and subclassers of NSInputStream and NSOutputStream must maintain this contract. [someStream
setDelegate:nil] must restore this behavior. As usual, delegates are not retained.  
  
-
(id)propertyForKey:(NSString *)key;  
- (BOOL)setProperty:(id)property
forKey:(NSString *)key;  
  
- (void)scheduleInRunLoop:(NSRunLoop
*)aRunLoop forMode:(NSString *)mode;  
-
(void)removeFromRunLoop:(NSRunLoop *)aRunLoop
forMode:(NSString *)mode;  
  
-
(NSStreamStatus)streamStatus;  
- (NSError *)streamError;  
@end  
  
@protocol
NSStreamDelegate
<NSObject>  
@optional  
-
(void)stream:(NSStream *)aStream
handleEvent:(NSStreamEvent)eventCode;  
@end  
  
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))//不能在ios上使用  
@interface
NSStream (NSSocketStreamCreationExtensions)  
+ (void)getStreamsToHost:(NSHost
*)host port:(NSInteger)port
inputStream:(NSInputStream **)inputStream
outputStream:(NSOutputStream **)outputStream;  
@end  
#endif  

NSInputStream和NSOutputStream都是继承NSStream,接口例如以下

@interface NSInputStream : NSStream
- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len;
- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len;
- (BOOL)hasBytesAvailable;
@end

@interface NSOutputStream : NSStream
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;
- (BOOL)hasSpaceAvailable;
@end

1
2
3
4
5
6
7
8
9
10
@interface
NSInputStream
: NSStream  
- (NSInteger)read:(uint8_t
*)buffer maxLength:(NSUInteger)len;  
-
(BOOL)getBuffer:(uint8_t **)buffer
length:(NSUInteger *)len;  
- (BOOL)hasBytesAvailable;  
@end  
  
@interface
NSOutputStream
: NSStream  
- (NSInteger)write:(const
uint8_t *)buffer
maxLength:(NSUInteger)len;  
-
(BOOL)hasSpaceAvailable;  
@end  

但这里getStreamsToHost方法,在iOS上不可用。那么在iOS上改怎样初始化NSStream呢?这事实上是iOS的一个小bug。苹果已经给出了答案,须要我们自己为NSStream加入一个类目:

IOS研究之网络编程(二)-Cocoa Streams使用具体解释的更多相关文章

  1. iOS开发之网络编程--5、NSURLSessionUploadTask+NSURLSessionDataDelegate代理上传

    前言:关于NSURLSession的主要内容快到尾声了,这里就讲讲文件上传.关于文件上传当然就要使用NSURLSessionUploadTask,这里直接讲解常用的会和代理NSURLSessionDa ...

  2. iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>

    前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...

  3. iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)

    前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续 ...

  4. iOS开发之网络编程--2、NSURLSessionDownloadTask文件下载

    本文内容大纲: 1.回顾NSURLSessionTask 2.NSURLSessionDownloadTask大文件之block下载 3.NSURLSessionDownloadTask大文件之代理方 ...

  5. iOS开发之网络编程--使用NSURLConnection实现文件上传

    前言:使用NSURLConnection实现文件上传有点繁琐.    本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...

  6. iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄

    前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传.    在实际开发中,输入输出流用的比较少,但 ...

  7. iOS开发之网络编程--使用NSURLConnection实现大文件下载

    主要思路(实现下载数据分段写入缓存中) 1.使用NSURLConnectionDataDelegate以及代理方法.2.在成功获取响应的代理方法中,获得沙盒全路径,并在该路径下创建空文件和文件句柄.3 ...

  8. iOS开发之网络编程--小文件下载

    文件下载方式: 如果下载的文件比较小,下载方式: 直接用NSData的 +(id)dataWithContentsOfURL:(NSURL*)url; 利用NSURLConnection发送一个HTT ...

  9. Linux网络编程(二)

    Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...

随机推荐

  1. 模板jinja2常用方法

    http://docs.jinkan.org/docs/jinja2/ 摘自 http://www.pythontip.com/blog/post/5455/ 数学运算       +, -, *,  ...

  2. 多表的时候怎样在MVC VIEW中显示

    原文发布时间为:2011-04-01 -- 来源于本人的百度文章 [由搬家工具导入] Linq join query displayed in MVC view Instead of returnin ...

  3. Docker(八):私有仓库

    有时候使用Docker Hub这样的公共仓库可能不太方便,用户可以创建一个本地仓库供私人使用. 在安装了Docker之后,可以获取官方的registry镜像来运行,docker-registry是官方 ...

  4. ARM QT实现多点触摸【转】

    转自:http://www.cnblogs.com/sky1991/archive/2013/06/03/3114702.html http://www.ptrackapp.com/apclassys ...

  5. jenkins 中 violation使用pylint

    在jenkins中无法打开源码问题: 1. 在 Report Violations的 Source encoding 设置为 项目文件的编码, 如: utf-8.  缺省是 default. 2. 在 ...

  6. hdu 4857(好题,反向拓扑排序)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  7. Shell 括号辨识(转http://blog.csdn.net/taiyang1987912/article/details/39551385)

    一.小括号,圆括号() 1.单小括号 ()    ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...

  8. Codeforces Round #454 C. Shockers【模拟/hash】

    C. Shockers time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  9. 组队训练3回放 ——hnqw1214

    组队训练3回放 练习赛过程回放: 开场先看最后一题, 发现是专题训练时做过的网络流原题, cst照着之前的打一遍,第一遍WA, 发现数组开小了,改大后AC. 这时候qw看B题, 一开始想不到方法, c ...

  10. HDU-ACM“菜鸟先飞”冬训系列赛——第7场 H

    Problem H Problem Description 小边为了寻找梦寐以求的骨头误入一个迷宫,它灵敏的嗅觉告诉它,在迷宫中的某一处有一块完美的骨头.由于迷宫会在一段时间后关闭,所以小边必须在一定 ...