
рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕рд░реНрд╡рд░ рддрдХ рдлрд╝реЛрдЯреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╕рдВрднрд╡
рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП Cloud.Ru Mail.Ru рдореЛрдмрд╛рдЗрд▓ рдРрдк
рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реА рдореБрдЦреНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдереАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ, рд╣рдордиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдЧреИрд▓рд░реА рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬреЛ рдлреЛрди рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╣ рдХрдИ рдмрд╛рд░ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЦреБрдж рдХреЛ рдореЗрд▓ рд╕реЗ рддрд╕реНрд╡реАрд░реЗрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдХреНрд▓рд╛рдЙрдб рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рди рдХреЗрд╡рд▓ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрджрд░реНрд╢ рдХреЗ рдХрд░реАрдм рд╣реИред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдорд╛рд░реА
POSInputStreamLibrary рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдереА, рдЬреЛ iOS рд╕рд┐рд╕реНрдЯрдо рдЧреИрд▓рд░реА рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдлрд╝реЛрдЯреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред ALAssetLibrary рдФрд░ CFNetwork рдЪреМрдЦрдЯреЗ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдШрдирд┐рд╖реНрда рдПрдХреАрдХрд░рдг рдХреЗ рдХрд╛рд░рдг, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рдПрдХ рдмрд╛рдЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ iOS рдбреЗрд╡рд▓рдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ
NSInputStream рд╡рд░реНрдЧ рдХреЗ рдЕрдкрдиреЗ рд╡рдВрд╢рдЬ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

Mail.Ru рдХреНрд▓рд╛рдЙрдб рдХреЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЗ рджреМрд░рд╛рди,
POSBlobInputStream рд╕реНрдЯреНрд░реАрдо
рдиреЗ рдмрд╣реБрдд рд╕рдореГрджреНрдз рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИ:
ALAsset
рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди- рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдореЛрдб рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
ALAsset
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ ALAsset
рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд ALAsset
ALAsset
рд╕реЗ рдХреИрд╢рд┐рдВрдЧ рдбреЗрдЯрд╛ рд░реАрдбрд┐рдВрдЧ- рдСрдлрд╝рд╕реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛
- рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдЗрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрд░реНрде рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХреЗрд╡рд▓ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИ , рд╕рд╛рде рд╣реА рд╕рд╛рде
рдореБрдЦреНрдп рдХреЛрдХреЛрдЖ рднрдВрдбрд╛рд░ рднреА рд╣реИ ред
URL рдлрд╝реНрд▓реЛ рдПрд▓реЗрд╕реЗрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛

рдЬрдм рддрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ рдлрд╝реЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдереА, рддрдм рддрдХ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдерд╛ред рдЧреИрд▓рд░реА рд╕реЗ рдЫрд╡рд┐ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдорд╛рдирдХ рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдИ рдЧрдИ рдереАред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП
NSURLRequest
рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@interface NSInputStream (NSInputStreamExtensions) // ... + (id)inputStreamWithFileAtPath:(NSString *)path; // ... @end
@interface NSMutableURLRequest (NSMutableHTTPURLRequest) // ... - (void)setHTTPBodyStream:(NSInputStream *)inputStream; // ... @end
рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп:

рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдиреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдиреБрдкрдпреЛрдЧреА рдмрдирд╛ рджрд┐рдпрд╛ред рд░реЛрд▓рд░реНрд╕ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реБрдИрдВ:
- рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЦрд╛рд▓реА рд╕реНрдерд╛рди рд▓реЛрдб рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рд╡реАрдбрд┐рдпреЛ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рд╕рдордп 10 рдпрд╛ рдЕрдзрд┐рдХ рдорд┐рдирдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ
рдЗрди рдЕрд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
POSBlobInputStream
рд╡рд░реНрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЧреИрд▓рд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ URL рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХреГрдд рд╣реИ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рдкрдврд╝рддрд╛ рд╣реИред
@interface NSInputStream (POS) + (NSInputStream *)pos_inputStreamWithAssetURL:(NSURL *)assetURL; + (NSInputStream *)pos_inputStreamWithAssetURL:(NSURL *)assetURL asynchronous:(BOOL)asynchronous; + (NSInputStream *)pos_inputStreamForCFNetworkWithAssetURL:(NSURL *)assetURL; @end
рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ POSBlobInputStream рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддреБрдЪреНрдЫ рд╣реИред
@interface NSInputStream : NSStream - (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len; - (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len; - (BOOL)hasBytesAvailable; @end
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░,
getBuffer:length:
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ 2 рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
ALAssetRepresentation
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЙрдирдХреА рдореИрдкрд┐рдВрдЧ рдиреЗ
ALAssetRepresentation
рдкреНрд░рд╢реНрди рдирд╣реАрдВ рдЙрдард╛рдпрд╛ред
@interface ALAssetRepresentation : NSObject // ... - (long long)size; - (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error; // ... @end
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирдП рдмрдиреЗ
POSBlobInputStream
рдХреЛ рдкрд╛рдиреА рдореЗрдВ
POSBlobInputStream
, рдореБрдЭреЗ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖред NSStream рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдлреЙрд░реНрдо рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛:
*** -propertyForKey: only defined for abstract class. Define -[POSBlobInputStream propertyForKey:]
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐
NSInputStream
рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ init рд╡рд┐рдзрд┐рдпрд╛рдБ
NSInputStream
рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреА рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ
рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рднреА
NSStream
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд░рд╛ рд╣реИред
@interface NSStream : NSObject - (void)open; - (void)close; - (id <NSStreamDelegate>)delegate; - (void)setDelegate:(id <NSStreamDelegate>)delegate; - (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
рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ POSBlobInputStream рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб
POSBlobInputStream
рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ
POSBlobInputStream
рд╕рдмрд╕реЗ рдХрдард┐рди
POSBlobInputStream
рдПрдХ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред
NSStream
scheduleInRunLoop:forMode:
removeFromRunLoop:forMode:
scheduleInRunLoop:forMode:
removeFromRunLoop:forMode:
рдФрд░
setDelegate:
рд╡рд┐рдзрд┐рдпрд╛рдБ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рдкреНрд░рд╡рд╛рд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрджреНрдШрд╛рдЯрди рдХреЗ рд╕рдордп рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдмрд╛рдЗрдЯ рдирд╣реАрдВ рд╣реИред
POSBlobInputStream
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рддрд╛ рд╣реИ:
open
рд╡рд┐рдзрд┐ рдХреЗ рдПрдХ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред POSBlobInputStream
рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЦреБрд▓рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╡рд╣ рдЕрдкрдиреЗ NSURL
рджреНрд╡рд╛рд░рд╛ ALAssetRepresentation
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ ALAssetRepresentation
рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЖрдИрдУрдПрд╕ рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдХреЗрд╡рд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, NSStreamStatusNotOpen
рд╕реЗ NSStreamStatusOpen
рдпрд╛ NSStreamStatusError
рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ NSStreamStatusError
рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИредNSStreamEventHasBytesAvailable
рдШрдЯрдирд╛ рдХреЛ NSStreamEventHasBytesAvailable
рдкрдардиреАрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд POSBlobInputStream рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдЪреЗрдХрд╕рдо рдЧрдгрдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред рдЖрдЗрдП рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
NSInputStream *stream = [NSInputStream pos_inputStreamWithAssetURL:assetURL asynchronous:NO]; [stream open]; if ([stream streamStatus] == NSStreamStatusError) { return; } NSParameterAssert([stream streamStatus] == NSStreamStatusOpen); while ([stream hasBytesAvailable]) { uint8_t buffer[kBufferSize]; const NSInteger readCount = [stream read:buffer maxLength:kBufferSize]; if (readCount < 0) { return; } else if (readCount > 0) { } } if ([stream streamStatus] != NSStreamStatusAtEnd) { return; } [stream close];
рдЕрдкрдиреА рд╕рднреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрджреГрд╢реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧрддрд┐рд░реЛрдз рд╣реЛрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЦреБрд▓реА рд╡рд┐рдзрд┐ рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдИрдУрдПрд╕ рдПрд╕рдбреАрдХреЗ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ
ALAsset
рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ
ALAsset
рд╣реИред рдпрджрд┐
open
рдХрд╛рд░реНрдп рдХреЛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЧрддрд┐рд░реЛрдз рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдзрд╛рд░рд╛ рдХреЗ рд╕рдордХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдереА, рдиреАрдЪреЗ рдЕрдиреБрднрд╛рдЧ "NSURLRequest рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ" рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЪреЗрдХрд╕рдо рдЧрдгрдирд╛ рдХрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджрд┐рдЦрддрд╛ рд╣реИред
@interface ChecksumCalculator () <NSStreamDelegate> @end @implementation ChecksumCalculator - (void)calculateChecksumForStream:(NSInputStream *)aStream { aStream.delegate = self; [aStream open]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; [aStream scheduleInRunLoop:runLoop forMode:NSDefaultRunLoopMode]; for (;;) { @autoreleasepool { if (![runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopInterval]]) { break; } const NSStreamStatus streamStatus = [aStream streamStatus]; if (streamStatus == NSStreamStatusError || streamStatus == NSStreamStatusClosed) { break; } }} }); } #pragma mark - NSStreamDelegate - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { switch (eventCode) { case NSStreamEventHasBytesAvailable: { [self updateChecksumForStream:aStream]; } break; case NSStreamEventEndEncountered: { [self notifyChecksumCalculationCompleted]; [_stream close]; } break; case NSStreamEventErrorOccurred: { [self notifyErrorOccurred:[_stream streamError]]; [_stream close]; } break; } } @end
ChecksumCalculator
рдЦреБрдж рдХреЛ
POSBlobInputStream
рдИрд╡реЗрдВрдЯ
POSBlobInputStream
рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдзрд╛рд░рд╛ рдореЗрдВ рдирдпрд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдзрд╛рдЧрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реВрдЪреА рдореЗрдВ, рд╡реЗ GCD рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЖрдПрдВрдЧреЗред
ALAssetLibrary рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
ALAssetLibrary рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
ALAssetRepresentation
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ ALAssetRepresentation
рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред POSBlobInputStream
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдХреЗ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ read:maxLength:
рд╕рдордп рдШрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ read:maxLength:
рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдердХрд╛рд╡рдЯ рдХреЗ рдмрд╛рдж рд╣реА рдПрдХ рдирдпрд╛ рдХреЙрд▓ рд╣реЛрдЧрд╛редALAssetRepresentation
рдЕрдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ, рдЖрдИрдУрдПрд╕ 5.x рдкрд░, рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдлреЛрдЯреЛ рдХреЛ рдлреЛрди рдХреА рдЧреИрд▓рд░реА рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ getBytes:fromOffset:length:error:
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ getBytes:fromOffset:length:error:
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдзрд┐ред рдЗрд╕реА рд╕рдордп, рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, POSBlobInputStream
рдХреЛ ALAssetRepresentation
рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рд░реАрдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рдирд╣реАрдВред
NSURLRequest рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ iOS SDK рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрддрд░ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ
NSURLRequest
рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди CFNetwork рдврд╛рдВрдЪреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЗ рд▓рдВрдмреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдВрдХрд╛рд▓ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд▓рдорд╛рд░рд┐рдпрд╛рдБ рдЬрдорд╛ рдХреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдмрд╛рддреЗрдВ рдкрд╣рд▓реЗред
NSInputStream
"
рдЯреЛрд▓-рдлреНрд░реА NSInputStream
" iOS SDK рдХреНрд▓рд╛рд╕реЗрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЖрдк рдЗрд╕реЗ
CFReadStreamRef рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрдкрддреНрддрд┐
NSURLRequest
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреА рд╣реИред рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЕрдкрдиреЗ рдЬреБрдбрд╝рд╡рд╛рдВ рднрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ
POSBlobInputStream
рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕реА-
POSBlobInputStream
рд╕реА-рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ,
NSInputStream
рд╕рднреА C- рдХреЙрд▓ рдХреЛ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд
NSInputStream
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХреЙрд▓ рдХреЗ
NSInputStream
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рджреЛ рдЧрдВрднреАрд░ рд╡рд┐рдЪрд▓рди рд╣реИрдВ:
- рд╕рднреА рдХреЙрд▓ рдЕрдиреБрдорд╛рдирд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЕрдЪреНрдЫреЗ рд▓реЗрдЦ рд╣реИрдВ: рдХреЛрд░рдлрд╛рдЙрдВрдбреЗрд╢рди рдЯреЛрд▓-рдлреНрд░реА рдмреНрд░рд┐рдЬреЗрдЯ NSInputStream , рд╕рдмрдХреНрд▓рд╛рд╕рд┐рдВрдЧ NSInputStream рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ ред
- Proxying CFReadStreamGetError рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрд░реИрд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЬреНрдЮрд╛рди рдЖрд╡реЗрджрди рдХреЗ рдХреНрд░реИрд╢ рд▓реЙрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ CFStream рд╕реНрд░реЛрддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рд▓рдЧрд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рд╕рдВрдХреЗрддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкреБрд░рд╛рдирд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рддрдХ рд╕реАрдПрдлрдПрди рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдирд╣реАрдВ рдорд┐рдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рднреА
NSInputStream
рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ CFNetwork рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрд╕ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рджреБрдЦрдж рд╣реИред
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдпрд╣ CFNetwork рдХреЛ рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╢рддреНрд░реБрддрд╛рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рднрдбрд╝рдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИред CFNetwork рдХреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрд╕реЗ рдЗрд╕рдХреА рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рди рдХрд░реЗрдВред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ,
POSBlobInputStream
рдкреНрд░реЙрдкрд░реНрдЯреА
shouldNotifyCoreFoundationAboutStatusChange
ред рдпрджрд┐ рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реИ, рддреЛ:
- рдереНрд░реЗрдб C рдХреЙрд▓рдмреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛
- рд╡рд┐рдзрд┐
streamStatus
рдХреЛ рдХрднреА рдирд╣реАрдВ NSStreamStatusError
рдЭрдВрдбрд╛ рдЙрдард╛рдП рдЬрд╛рдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдореЗрдВ
NSStreamDelegate
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ (рдКрдкрд░ рдЪреЗрдХрд╕рдо рдЧрдгрдирд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ)ред
рдПрдХ рдФрд░ рдЕрдкреНрд░рд┐рдп рдЦреЛрдЬ рдпрд╣ рдереА рдХрд┐ рд╕реАрдПрдлрдПрди рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдЕрднреА рднреА рдЕрдкрдиреЗ рдкреЛрд▓-рдЗрдВрдЧ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реВрдк рдореЗрдВ
open
рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдереНрд░реЗрдб рдЗрд╕ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдЦреБрд▓реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рднреНрд░рд╖реНрдЯ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ рдврд╛рдВрдЪреЗ рдХреА рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛
POSBlobInputStream
рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реНрдб рдСрдкрд░реЗрд╢рди рдореЛрдб рдХреЗ рд╕рдорд░реНрдерди рдХрд╛ рдХрд╛рд░рдг рдереА, рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рдеред
рдСрдлрд╝рд╕реЗрдЯ рд╕рдорд░реНрдерди рдкрдврд╝реЗрдВ
Clouds Mail.Ru iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдкрдХреЛ рдЙрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдЯреНрд░реИрдлрд╝рд┐рдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдордп рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рд╣реИред рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
POSBlobInputStream
рдХреЛ рдлреЛрдЯреЛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╢реБрд░реВ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреБрдЫ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдореЗрдВ рдСрдлрд╕реЗрдЯ
NSStreamFileCurrentOffsetKey
рд╕рдВрдкрддреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдпрд╣ рдорд╛рдирдХ рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
POSBlobInputStream
рдХреЛ рдЧреИрд▓рд░реА рд╕реЗ рдлрд╝реЛрдЯреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕реЗ рдЗрд╕рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
POSBlobInputStreamDataSource
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
@protocol POSBlobInputStreamDataSource <NSObject> // // Self-explanatory KVO-compliant properties. @property (nonatomic, readonly, getter = isOpenCompleted) BOOL openCompleted; @property (nonatomic, readonly) BOOL hasBytesAvailable; @property (nonatomic, readonly, getter = isAtEnd) BOOL atEnd; @property (nonatomic, readonly) NSError *error; // // This selector will be called before anything else. - (void)open; // // Data Source configuring. - (id)propertyForKey:(NSString *)key; - (BOOL)setProperty:(id)property forKey:(NSString *)key; // // Data Source data. // The contracts of these selectors are the same as for NSInputStream. - (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)maxLength; - (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)bufferLength; @end
рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡реАрдУ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рд╕реНрдЯреНрд░реАрдо рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рдПрдирд╛рд▓реЙрдЧ рдХреА рдЦреЛрдЬ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЕрдЧрд░ рдЖрдк рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореЙрдбрд▓ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХрд╛ рд╕рдВрдХрдЯ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
HSCountingInputStream рдореЗрдВ , рдорд╛рдирдХ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЖрдВрддрд░рд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЧрд▓рдд рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЕрдХреНрд╕рд░ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
NTVStreamMux рдореЗрдВ :
#pragma mark Undocumented but necessary NSStream Overrides (fuck you Apple) - (void) _scheduleInCFRunLoop:(NSRunLoop*) inRunLoop forMode:(id)inMode { /* FUCK YOU APPLE */ } - (void) _setCFClientFlags:(CFOptionFlags)inFlags callback:(CFReadStreamClientCallBack)inCallback context:(CFStreamClientContext)inContext { /* NO SERIOUSLY, FUCK YOU */ }
POSBlobInputStream
, рдмрджрд▓реЗ рдореЗрдВ, Mail.Ru рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рдореБрдЦ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╕реЗрд╡рд╛ рдХреЗ рджреМрд░рд╛рди, рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реЗрдирд╛ рджреНрд╡рд╛рд░рд╛ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░реЗрдХ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдФрд░ рд╕рдорддрд▓ рдХрд┐рдП рдЧрдП, рдФрд░ рдЗрд╕ рд╕рдордп рдкреНрд░рд╡рд╛рд╣ рд╕рдмрд╕реЗ рд╕реНрдерд┐рд░ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦреЗрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЦреБрд╢реА рд╣реЛрдЧреАред
рдкрд╛рд╡реЗрд▓ рдУрд╕рд┐рдкреЛрд╡,
рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЙрдб рдЯреАрдо рд▓реАрдбрд░