On 9 Sep 2013, at 09:49, Marcel Weiher <marcel.wei...@gmail.com> wrote: > > The pattern I adopted long ago to avoid that sort of situation is to have an > instance variable for my temps, in which case the code becomes: > > [self setTemp:newObject]; > … do stuff … > [self setTemp:nil]; > > or if you prefer dot syntax: > > self.temp = newObject; > … do stuff … > self.temp = nil; > > Even if you forget nilling, you at most have an extended lifetime of an > object, not a leak. I also generally do the same in initialization code (but > not in dealloc). For me, that simply got rid of reference-counting pain. > Completely. Memory management is mediated by accessors, always. And > accessors are generated. >
This is great except that you lose the type information for the Class in question? A way around it might be to have one Instance Variable and a number of properties of the Right Type, but you'd have to define these in an @interface section which would be messy. e.g. @interface someClass () { id mTempIVar; } @property (nonatomic,retain) NSArray* pTempArray; @property (nonatomic,retain) NSNumber* pTempNumber; @end @implementation someClass @synthesize pTempArray = mTempIVar; @synthesize pTempNumber = mTempIVar; You'd also have to watch out that you didn't reuse the same "temp" in your methods. I toyed with the idea of writing a LocalMemoryManager class: +(id) allocLocalObjectOfClass:(Class) theClass forInstance:(id) theCallingObject andMethod:(NSString*) theMethodName; +(void) releaseLocalObjectsForClass:(Class) theClass andMethod:(NSString*) theMethodName; +(void) releaseAllLocalObjectsForClass:(Class) theClass; You'd call it like this: NSString* myString; myString = [[LocalMemoryManager allocLocalObjectOfClass:[NSString Class] forInstance:self andMethod:__FUNCTION__] initWithString@"xxxxx"]; Place a call to releaseLocalObjectsForClass at end of method to release all local objects and in dealloc call releaseAllLocalObjectsForClass. I just couldn't bear the thought of having to use a long wordy method call like allocLocalObjectOfClass to allocate objects. > I am starting to think that this may explain the (vast) difference in > perception of ARC, at least it’s an explanation I can understand: if you > made the switch to always having reference counting mediated by accessors, RC > goes away as a pain point. If you haven’t, it’s probably a huge pain that > ARC removes. Agreed I have my own way of handling local storage and use a different pattern, which, sometimes involves the dreaded goto! Cheers Dave _______________________________________________ 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