开发者

is this code correct re memory management - for a basic custom class

do I need to add/modify an开发者_运维技巧ything here re memory management for a custom class? (e.g. any "release" lines required, don't need a dealloc method?)

#import <Foundation/Foundation.h>
@interface TimelineItem : NSObject {
    NSDate *_startDate;
    BOOL _working;
    BOOL _coreWeekend;
}
@property (nonatomic, retain) NSDate *startDate;
@property (nonatomic) BOOL working;
@property (nonatomic) BOOL coreWeekend;
- (id)initWithStartDate:(NSDate*)startDate Working:(BOOL)working CoreWeekend:(BOOL)coreWeekend;
@end



#import "TimelineItem.h"
@implementation TimelineItem
@synthesize startDate = _startDate;
@synthesize working = _working;
@synthesize coreWeekend = _coreWeekend;
- (id)initWithStartDate:(NSDate*)startDate Working:(BOOL)working CoreWeekend:(BOOL)coreWeekend {
    if (self == [super init])
    {
        // Initialization
        self.startDate = startDate;
        self.working = working;
        self.coreWeekend = coreWeekend;
    }
    return self;
}
@end


No, it is not. You've retained the startDate parameter by declaring your property as (retain). This means you're responsible for releasing it at some point. You can fix this by adding:

- (void)dealloc {
  [_startDate release];
  [super dealloc];
}

Also, you shouldn't be capitalizing "Working" and "CoreWeekend" in the init method name. They should be "working" and "coreWeekend", respectively.


You need to implement -dealloc and release startDate there. Otherwise, this appears to be fine.

- (void)dealloc {
    [_startDate release];
    [super dealloc];
}


You need to release _startDate when the class is dealloced. Since you have as a property, the safest thing to do is set it to nil, and the auto-generated setter will take care of releasing it for you.

- (void)dealloc
{
    self.startDate = nil;
    [super dealloc];
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜