NSStream Class Reference
| Inherits from | |
| Conforms to | |
| Framework | /System/Library/Frameworks/Foundation.framework |
| Availability | Available in iOS 2.0 and later. |
| Companion guide | |
| Declared in | NSStream.h |
Overview
NSStream is an abstract class for objects representing streams. Its interface is common to all Cocoa stream classes, including its concrete subclasses NSInputStream and NSOutputStream.
NSStream objects provide an easy way to read and write data to and from a variety of media in a device-independent way. You can create stream objects for data located in memory, in a file, or on a network (using sockets), and you can use stream objects without loading all of the data into memory at once.
By default, NSStream instances that are not file-based are non-seekable, one-way streams (although custom seekable subclasses are possible). Once the data has been provided or consumed, the data cannot be retrieved from the stream.
Subclassing Notes
NSStream is an abstract class, incapable of instantiation and intended to be subclassed. It publishes a programmatic interface that all subclasses must adopt and provide implementations for. The two Apple-provided concrete subclasses of NSStream, NSInputStream and NSOutputStream, are suitable for most purposes. However, there might be situations when you want a peer subclass to NSInputStream and NSOutputStream. For example, you might want a class that implements a full-duplex (two-way) stream, or a class whose instances are capable of seeking through a stream.
Methods to Override
All subclasses must fully implement the following methods, which are presented in functional pairs:
Implement
opento open the stream for reading or writing and make the stream available to the client directly or, if the stream object is scheduled on a run loop, to the delegate. Implementcloseto close the stream and remove the stream object from the run loop, if necessary. A closed stream should still be able to accept new properties and report its current properties. Once a stream is closed, it cannot be reopened.delegateandsetDelegate:Return and set the delegate. By a default, a stream object must be its own delegate; so a
setDelegate:message with an argument ofnilshould restore this delegate. Do not retain the delegate to prevent retain cycles.To learn about delegates and delegation, read "“Delegation” in Cocoa Fundamentals Guide" in Cocoa Fundamentals Guide.
scheduleInRunLoop:forMode:andremoveFromRunLoop:forMode:Implement
scheduleInRunLoop:forMode:to schedule the stream object on the specified run loop for the specified mode. ImplementremoveFromRunLoop:forMode:to remove the object from the run loop. See the documentation of theNSRunLoopclass for details. Once the stream object for an open stream is scheduled on a run loop, it is the responsibility of the subclass as it processes stream data to sendstream:handleEvent:messages to its delegate.propertyForKey:andsetProperty:forKey:Implement these methods to return and set, respectively, the property value for the specified key. You may add custom properties, but be sure to handle all properties defined by
NSStreamas well.Implement
streamStatusto return the current status of the stream as a NSStreamStatus constant; you may define new NSStreamStatus constants, but be sure to handle theNSStream-defined constants properly. ImplementstreamErrorto return anNSErrorobject representing the current error. You might decide to return a customNSErrorobject that can provide complete and localized information about the error.
Instance Methods
close
Closes the receiver.
Discussion
Closing the stream terminates the flow of bytes and releases system resources that were reserved for the stream when it was opened. If the stream has been scheduled on a run loop, closing the stream implicitly removes the stream from the run loop. A stream that is closed can still be queried for its properties.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hdelegate
Returns the receiver’s delegate.
Return Value
The receiver’s delegate. The delegate must implement the NSStreamDelegate Protocol.
Discussion
By default, a stream is its own delegate, and subclasses of NSInputStream and NSOutputStream must maintain this contract.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hopen
Opens the receiving stream.
Discussion
A stream must be created before it can be opened. Once opened, a stream cannot be closed and reopened.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hpropertyForKey:
Returns the receiver’s property for a given key.
Parameters
- key
The key for one of the receiver's properties. See “Constants” for a description of the available property-key constants and associated values.
Return Value
The receiver’s property for the key key.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hremoveFromRunLoop:forMode:
Removes the receiver from a given run loop running in a given mode.
Parameters
- aRunLoop
The run loop on which the receiver was scheduled.
- mode
The mode for the run loop.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hscheduleInRunLoop:forMode:
Schedules the receiver on a given run loop in a given mode.
Parameters
- aRunLoop
The run loop on which to schedule the receiver.
- mode
The mode for the run loop.
Discussion
Unless the client is polling the stream, it is responsible for ensuring that the stream is scheduled on at least one run loop and that at least one of the run loops on which the stream is scheduled is being run.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hsetDelegate:
Sets the receiver’s delegate.
Parameters
- delegate
The delegate for the receiver.
Discussion
By default, a stream is its own delegate, and subclasses of NSInputStream and NSOutputStream must maintain this contract. If you override this method in a subclass, passing nil must restore the receiver as its own delegate. Delegates are not retained.
To learn about delegates and delegation, read "“Delegation” in Cocoa Fundamentals Guide" in Cocoa Fundamentals Guide.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hsetProperty:forKey:
Attempts to set the value of a given property of the receiver and returns a Boolean value that indicates whether the value is accepted by the receiver.
Parameters
- property
The value for key.
- key
The key for one of the receiver's properties. See “Constants” for a description of the available property-key constants and expected values.
Return Value
YES if the value is accepted by the receiver, otherwise NO.
Availability
- Available in iOS 2.0 and later.
See Also
Declared In
NSStream.hstreamError
Returns an NSError object representing the stream error.
Return Value
An NSError object representing the stream error, or nil if no error has been encountered.
Availability
- Available in iOS 2.0 and later.
Declared In
NSStream.hstreamStatus
Returns the receiver’s status.
Return Value
The receiver’s status.
Discussion
See “Constants” for a description of the available NSStreamStatus constants.
Availability
- Available in iOS 2.0 and later.
Declared In
NSStream.hConstants
NSStreamStatus
The type declared for the constants listed in “Stream Status Constants.”
typedef NSUInteger NSStreamStatus;
Availability
- Available in iOS 2.0 and later.
Declared In
NSStream.hStream Status Constants
These constants indicate the current status of a stream. They are returned by streamStatus.
typedef enum {
NSStreamStatusNotOpen = 0,
NSStreamStatusOpening = 1,
NSStreamStatusOpen = 2,
NSStreamStatusReading = 3,
NSStreamStatusWriting = 4,
NSStreamStatusAtEnd = 5,
NSStreamStatusClosed = 6,
NSStreamStatusError = 7
};
Constants
NSStreamStatusNotOpenThe stream is not open for reading or writing. This status is returned before the underlying call to open a stream but after it’s been created.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamStatusOpeningThe stream is in the process of being opened for reading or for writing. For network streams, this status might include the time after the stream was opened, but while network DNS resolution is happening.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamStatusOpenThe stream is open, but no reading or writing is occurring.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamStatusReadingData is being read from the stream. This status would be returned if code on another thread were to call
streamStatuson the stream while aread:maxLength:call (NSInputStream) was in progress.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamStatusWritingData is being written to the stream. This status would be returned if code on another thread were to call
streamStatuson the stream while awrite:maxLength:call (NSOutputStream) was in progress.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamStatusAtEndThere is no more data to read, or no more data can be written to the stream. When this status is returned, the stream is in a “non-blocking” mode and no data are available.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamStatusClosedThe stream is closed (
closehas been called on it).Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamStatusErrorThe remote end of the connection can’t be contacted, or the connection has been severed for some other reason.
Available in iOS 2.0 and later.
Declared in
NSStream.h.
NSStreamEvent
The type declared for the constants listed in “Stream Event Constants.”
typedef NSUInteger NSStreamEvent;
Availability
- Available in iOS 2.0 and later.
Declared In
NSStream.hStream Event Constants
One or more of these constants may be sent to the delegate as a bit field in the second parameter of stream:handleEvent:.
typedef enum {
NSStreamEventNone = 0,
NSStreamEventOpenCompleted = 1 << 0,
NSStreamEventHasBytesAvailable = 1 << 1,
NSStreamEventHasSpaceAvailable = 1 << 2,
NSStreamEventErrorOccurred = 1 << 3,
NSStreamEventEndEncountered = 1 << 4
};
Constants
NSStreamEventNoneNo event has occurred.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamEventOpenCompletedThe open has completed successfully.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamEventHasBytesAvailableThe stream has bytes to be read.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamEventHasSpaceAvailableThe stream can accept bytes for writing.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamEventErrorOccurredAn error has occurred on the stream.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamEventEndEncounteredThe end of the stream has been reached.
Available in iOS 2.0 and later.
Declared in
NSStream.h.
NSStream Property Keys
NSStream defines these string constants as keys for accessing stream properties using propertyForKey: and setting properties with setProperty:forKey::
NSString * const NSStreamSocketSecurityLevelKey; NSString * const NSStreamSOCKSProxyConfigurationKey; NSString * const NSStreamSOCKSProxyHostKey; NSString * const NSStreamSOCKSProxyPortKey; NSString * const NSStreamSOCKSProxyVersionKey; NSString * const NSStreamSOCKSProxyUserKey; NSString * const NSStreamSOCKSProxyPasswordKey; NSString * const NSStreamSOCKSProxyVersion4; NSString * const NSStreamSOCKSProxyVersion5; NSString * const NSStreamDataWrittenToMemoryStreamKey; NSString * const NSStreamFileCurrentOffsetKey; NSString * const NSStreamNetworkServiceType;
Constants
NSStreamSocketSecurityLevelKeyThe security level of the target stream. See “Secure-Socket Layer (SSL) Security Level” for a list of possible values.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSProxyConfigurationKeyValue is an
NSDictionaryobject containing SOCKS proxy configuration information.The dictionary returned from the System Configuration framework for SOCKS proxies usually suffices.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamDataWrittenToMemoryStreamKeyValue is an
NSDatainstance containing the data written to a memory stream.Use this property when you have an output-stream object instantiated to collect written data in memory. The value of this property is read-only.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamFileCurrentOffsetKeyValue is an
NSNumberobject containing the current absolute offset of the stream.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamNetworkServiceTypeThe type of service for the stream. Providing the service type allows the system to properly handle certain attributes of the stream, including routing and suspension behavior. Most streams do not need to set this property. See “Stream Service Types” for a list of possible values.
Available in iOS 4.0 and later.
Declared in
NSStream.h.
Declared In
NSStream.hNSStream Error Domains
NSStream defines these string constants to represent error domains that can be returned by streamError:
NSString * const NSStreamSocketSSLErrorDomain ; NSString * const NSStreamSOCKSErrorDomain ;
Constants
NSStreamSocketSSLErrorDomainThe error domain used by
NSErrorwhen reporting SSL errors.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSErrorDomainThe error domain used by
NSErrorwhen reporting SOCKS errors.Available in iOS 2.0 and later.
Declared in
NSStream.h.
Secure-Socket Layer (SSL) Security Level
NSStream defines these string constants for specifying the secure-socket layer (SSL) security level.
NSString * const NSStreamSocketSecurityLevelNone; NSString * const NSStreamSocketSecurityLevelSSLv2; NSString * const NSStreamSocketSecurityLevelSSLv3; NSString * const NSStreamSocketSecurityLevelTLSv1; NSString * const NSStreamSocketSecurityLevelNegotiatedSSL
Constants
NSStreamSocketSecurityLevelNoneSpecifies that no security level be set for a socket stream.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSocketSecurityLevelSSLv2Specifies that SSL version 2 be set as the security protocol for a socket stream.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSocketSecurityLevelSSLv3Specifies that SSL version 3 be set as the security protocol for a socket stream.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSocketSecurityLevelTLSv1Specifies that TLS version 1 be set as the security protocol for a socket stream.
Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSocketSecurityLevelNegotiatedSSLSpecifies that the highest level security protocol that can be negotiated be set as the security protocol for a socket stream.
Available in iOS 2.0 and later.
Declared in
NSStream.h.
Discussion
You access and set these values using the NSStreamSocketSecurityLevelKey property key.
SOCKS Proxy Configuration Values
NSStream defines these string constants for use as keys to specify SOCKS proxy configuration values in an NSDictionary object.
NSString * const NSStreamSOCKSProxyHostKey; NSString * const NSStreamSOCKSProxyPortKey; NSString * const NSStreamSOCKSProxyVersionKey; NSString * const NSStreamSOCKSProxyUserKey; NSString * const NSStreamSOCKSProxyPasswordKey; NSString * const NSStreamSOCKSProxyVersion4; NSString * const NSStreamSOCKSProxyVersion5
Constants
NSStreamSOCKSProxyHostKeyValue is an
NSStringobject that represents the SOCKS proxy host.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSProxyPortKeyValue is an
NSNumberobject containing an integer that represents the port on which the proxy listens.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSProxyVersionKeyValue is either
NSStreamSOCKSProxyVersion4orNSStreamSOCKSProxyVersion5.If this key is not present,
NSStreamSOCKSProxyVersion5is used by default.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSProxyUserKeyValue is an
NSStringobject containing the user’s name.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSProxyPasswordKeyValue is an
NSStringobject containing the user’s password.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSProxyVersion4Possible value for
NSStreamSOCKSProxyVersionKey.Available in iOS 2.0 and later.
Declared in
NSStream.h.NSStreamSOCKSProxyVersion5Possible value for
NSStreamSOCKSProxyVersionKey.Available in iOS 2.0 and later.
Declared in
NSStream.h.
Discussion
You set the dictionary object as the current SOCKS proxy configuration using the NSStreamSOCKSProxyConfigurationKey key
Stream Service Types
NSStream defines these string constants for specifying the service type of a stream.
NSString * const NSStreamNetworkServiceTypeVoIP NSString * const NSStreamNetworkServiceTypeVideo NSString * const NSStreamNetworkServiceTypeBackground NSString * const NSStreamNetworkServiceTypeVoice
Constants
NSStreamNetworkServiceTypeVoIPSpecifies that the stream is providing VoIP service.
Available in iOS 4.0 and later.
Declared in
NSStream.h.NSStreamNetworkServiceTypeVideoSpecifies that the stream is providing video service.
Available in iOS 5.0 and later.
Declared in
NSStream.h.NSStreamNetworkServiceTypeBackgroundSpecifies that the stream is providing a background service.
Available in iOS 5.0 and later.
Declared in
NSStream.h.NSStreamNetworkServiceTypeVoiceSpecifies that the stream is providing voice service.
Available in iOS 5.0 and later.
Declared in
NSStream.h.
© 2010 Apple Inc. All Rights Reserved. (Last updated: 2010-12-17)