Clean up -[NSImage initWithCoder:], reduce amount of releases of self.

Some context available in PR #12 and  PR #13.
This commit is contained in:
Ivan Vučica 2017-10-29 14:34:02 +00:00
parent 7270f8efc7
commit 280c3e0095
2 changed files with 14 additions and 9 deletions

View file

@ -1,3 +1,8 @@
2017-12-07 Ivan Vucica <ivan@vucica.net>
* Source/NSImage.m (-initWithCoder:): Clean up and reduce amount
of releases of self.
2017-12-03 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSScreen.h

View file

@ -1967,25 +1967,25 @@ static NSSize GSResolutionOfImageRep(NSImageRep *rep)
- (id) initWithCoder: (NSCoder*)coder
{
BOOL flag;
NSImage *replacementImage;
NSString *imageName;
_reps = [[NSMutableArray alloc] initWithCapacity: 2];
if ([coder allowsKeyedCoding])
{
if ([coder containsValueForKey: @"NSName"])
{
RELEASE(self);
NSImage *replacementImage;
NSString *imageName;
imageName = [coder decodeObjectForKey: @"NSName"];
replacementImage = [NSImage imageNamed: imageName];
if (replacementImage)
{
RELEASE(self);
return RETAIN(replacementImage);
}
replacementImage = [[NSImage alloc] init];
[replacementImage setName: imageName];
replacementImage->_flags.archiveByName = YES;
self = replacementImage;
[self setName: imageName];
self->_flags.archiveByName = YES;
}
if ([coder containsValueForKey: @"NSColor"])
{
@ -2062,17 +2062,17 @@ static NSSize GSResolutionOfImageRep(NSImageRep *rep)
[coder decodeValueOfObjCType: @encode(BOOL) at: &flag];
if (flag == YES)
{
NSImage *replacementImage;
NSString *theName = [coder decodeObject];
RELEASE(self);
replacementImage = [NSImage imageNamed: theName];
if (replacementImage)
{
RELEASE(self);
self = RETAIN(replacementImage);
}
else
{
self = [[NSImage alloc] init];
[self setName: theName];
self->_flags.archiveByName = YES;
}