On May 12, 2012, at 12:31 PM, Quincey Morris wrote: > I think the difference is that for UTF8String, there is an API contract that > promises the result will be an object (and it has the lifetime behavior of > any returned object that is returned with +0 retain semantics, as the > documentation warns).
No; -[NSString UTF8String] returns a char*, not an object. The difference is that -UTF8String has to allocate new memory to hold the result, because it's not in the same format as the internal string data (which is either UTF-16 or MacRoman and not null-terminated.) I believe internally it creates an autoreleased NSData and returns a pointer to its -bytes. -mutableBytes doesn't (and shouldn't!) allocate anything; it just hands back a raw pointer to the NSData's bytes. But what it look like (as Ken said) is that the implementation of -mutableBytes calls [[self retain] autorelease] to avoid a situation where the caller releases the NSMutableData but still wants to use the bytes. The retain+autorelease ensures that the object and its bytes hang on until the inner autorelease pool is drained. In other words, I don't believe -mutableBytes allocates any data, but it does prolong the lifespan of its receiver. —Jens _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com