Search code examples
objective-ciosdealloc

Is it necessary to add a dealloc method in a Objective-C Class?


If a UIviewController subclass is created, the method 'dealloc' is created automatically for you.

- (void)dealloc{}

However, when I create a Objective-C Class, the method is not auto-created. Is it necessary to add the dealloc method so that I can release the properties in the class? Especially if I have retained them in the header file?

For example in my Objective-C class header file I have

@interface ClassA : NSObject 
{
    NSString *someProperty;
    UINavigationController *navcon;
}

@property (nonatomic, retain) NSString *someProperty;
@property (nonatomic, retain) UINavigationController *navcon;

Do I need to manually create a dealloc method to release the properties as below?

-(void)dealloc
{
    [someProperty release];
    [navcon release];
}

Solution

  • Yes you must.

    dealloc is called upon your object before it is destroyed for good and its memory is returned to the OS. If it holds onto other objects, such as in your case, it is important for those objects to be released too.

    That's why you need to override dealloc and release any resource you are holding to there.

    The fact that some Xcode template may or may not provide you with a sample implementation of dealloc is irrelevant.