Dodgy Code - Low Level Memory Management Question!
Dodgy Code - Low Level Memory Management Question!
- Subject: Dodgy Code - Low Level Memory Management Question!
- From: Dave <email@hidden>
- Date: Mon, 25 Jan 2016 18:48:48 +0000
Hi All,
This is a bit dodgy so bear with me.
I have a class that is a subclass of a third party framework. This is hard to explain, but I’m trying to make it into a singleton of kinds. When the framework wants an object of this particular class it alloc/init’s a new one. This calls the designated initializer. I have overridden this initializer and want to pass back a version of the object that has already been allocated and has a retainCount of at least +1. I know that when the object is returned to the caller inside the framework it is going to be autoreleased. In my override I do this:
-(instancetype) initWithID:(NSString*) something
{
NSString* myID;
id myNewObject;
id myCachedObject;
myNewObject = [super initWithSomething: something];
if (myNewObject == nil)
return nil;
myID = [self getID];
myCachedObject = [LTWCacheManager getObjectForID: myID];
if ( myCachedObject == nil);
{
self = myNewObject;
[LTWCacheManager addToCache: myID];
return self;
}
[myNewObject release];
[myCachedObject retain]; //Added this Badness but it makes no difference.
self = myCachedObject;
return self;
}
Now when the (one) Cached object is (finally) released it crashes……. It gets autoreleased after this method returns. Other then crashing when it is dealloc’ed, it seems to work ok.
I know the above is dodgy but its a work around and I’m wondering if I can do something like this as an interim fix to get my past a hurdle?
Thanks in Advance,
All the Best
Dave
PS
Don’t worry, I’ve sacrificed the correct number of chickens to be protected from the curse of this hack! lol
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden