[opensource-dev] About memory management on macOS 10.12 (Sierra) potentially affecting all viewers
Geir Nøklebye
geir.noklebye at dayturn.com
Fri Jul 8 14:13:35 PDT 2016
I cannot see there is anything “advanced” MRR (manual retain-release) going on in:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
insert your viewer code here
[pool release];
That can’t be handled with @autoreleasepool, if you even need to handle it outside the main thread autoreleasepool
In fact the above is a classic example of the old garbage collector in action.
Geir,
> On 8. jul. 2016, at 21.47, Geir Nøklebye <geir.noklebye at dayturn.com> wrote:
>
>> Cinder Roxley said:
>
>> The viewer has never used the garbage collector so it?s not an issue.
>
>
>
> Why is it that in llopenglview-objc.mm, as en example, we have statement like:
>
> NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease];
>
> or
>
> - (void)dealloc
> {
> [[NSNotificationCenter defaultCenter] removeObserver:self];
> [super dealloc];
> }
>
> while Apples ARC migration guidelines states:
>
> You cannot explicitly invoke dealloc, or implement or invoke retain, release, retainCount, or autorelease.
>
> You can’t invoke dealloc.
>
> Custom dealloc methods in ARC do not require a call to [super dealloc] (it actually results in a compiler error). The chaining to super is automated and enforced by the compiler.
>
>
> Or in llwindowmacosx-objc.mm we have code such as:
>
> bool copyToPBoard(const unsigned short *str, unsigned int len)
> {
> NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
> NSPasteboard *pboard = [NSPasteboard generalPasteboard];
> [pboard clearContents];
>
>
> NSArray *contentsToPaste = [[NSArray alloc] initWithObjects:[NSString stringWithCharacters:str length:len], nil];
> [pool release];
> return [pboard writeObjects:contentsToPaste];
> }
>
> Apple’s documentation specifically says how to rewrite this construct for ARC.
>
> https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/index.html#//apple_ref/occ/cl/NSAutoreleasePool <https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/index.html#//apple_ref/occ/cl/NSAutoreleasePool>
>
>
> So all this code needs to be rewritten to support ARC or it will not run or fail on 10.12.
>
>
> Geir Nøklebye,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.secondlife.com/pipermail/opensource-dev/attachments/20160708/18fe5162/attachment-0001.htm
More information about the opensource-dev
mailing list