> Subject: Re: using autorelease in apple's CF
> From: thera...@sucs.org
> Date: Wed, 13 May 2015 09:51:47 +0100
> CC: gnustep-dev@gnu.org
> To: alexey.pereva...@hotmail.com
> 
> On 13 May 2015, at 09:39, Alexey Perevalov <alexey.pereva...@hotmail.com> 
> wrote:
> > 
> > If I truly understand, to place object into autorelease pool need to send 
> > autorelease message [object autorelease], it will release ownership from 
> > client code,
> > in details, it just send addObject of AutoreleasePool instance, it puts 
> > object into pool.
> > 
> > In my implementation, for example of CFString, 
> > CFStringRef CFStringCreateWithCString(CFAllocatorRef allocator, const char 
> > *cString, CFStringEncoding encoding){
> >    return ToCFString([[NSString allocWithZone:NULL] initWithCString:cString 
> > encoding:convertCFEncodingToNSEncoding(encoding)]);
> > }
> > 
> > Just NSString is created, and initWithCString is not calling autorelase, 
> > but stringWithCString is calling it.
> > So if in CFStringCreateWithCString just send autorelease for newly created 
> > object, no need to warry about releasing it in client code,
> > in case of client is ARC enabled.
> 
> I don’t think I understand the last bit.  Autoreleasing something means ‘I 
> have a temporary reference to this, which I intend to pass up the stack, and 
> it should be deleted at some point in the future’.  You trade not having to 
> release it in the calling code for having to retain it in the calling code if 
> it does want to retain a reference to the object.
> 
> Autoreleasing is also slower than releasing because it requires adding the 
> object to the pool and then popping it later.  It’s also not great for memory 
> consumption, because the object will be kept alive by the reference owned by 
> the autorelease pool, right until the point at which it is deleted.
> 
> This is why, in ARC mode, the compiler has the option of promoting a returned 
> autoreleased object to a retained object and then explicitly releasing it.
> 
> The main reason to use autoreleased references is if you expect to have a lot 
> of assignments of that reference to temporaries as the reference is 
> propagated up the stack.  These won’t need retain count manipulations.
> 
> In pre-ARC Objective-C, autorelease was also a good way of returning 
> temporary objects, as the caller didn’t need to free them.  With ARC, the 
> compiler will do the same thing more efficiently (and reduce overall memory 
> usage).
> 
> What problem are you actually trying to solve?
Just check GCDAsyncSocket (mentioned above) with CFStreamCreatePairWithSocket 
implemented through NSIn/Output streams ;)

> 
> David
> 
> -- Sent from my brain
> 
                                          
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to