open now checks the stream status before potentially opening again (and leaking memory).
close now checks stream status before attempting to close (potentially closing an already closed stream). Also an autoreleasepool now wraps the NSData object creation. Since close may be called in tight loops, this correctly releases memory in a timely manner.
write:maxLength: now is wrapped in an autoreleasepool. Since this is called in tight loops, the creation of the outputBuffer was causing memory to grow as a compresion was underway. The autoreleasepool mitigates this situation.
Specifically:
open
now checks the stream status before potentially opening again (and leaking memory).close
now checks stream status before attempting to close (potentially closing an already closed stream). Also an autoreleasepool now wraps the NSData object creation. Sinceclose
may be called in tight loops, this correctly releases memory in a timely manner.write:maxLength:
now is wrapped in an autoreleasepool. Since this is called in tight loops, the creation of theoutputBuffer
was causing memory to grow as a compresion was underway. The autoreleasepool mitigates this situation.