этот код правильный повтор управления памятью - для базового пользовательского класса - PullRequest
1 голос
/ 25 мая 2011

мне нужно что-то добавить / изменить здесь, для управления памятью для пользовательского класса?(например, требуются ли какие-либо строки "release", не нужен метод dealloc?)

#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

Ответы [ 3 ]

4 голосов
/ 25 мая 2011

Нет, это не так.Вы retained startDate параметр, объявив вашу собственность как (retain).Это означает, что вы в какой-то момент ответственны за releasing.Вы можете исправить это, добавив:

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

Кроме того, не следует использовать заглавные буквы «Working» и «CoreWeekend» в имени метода init.Они должны быть «работающими» и «coreWeekend» соответственно.

3 голосов
/ 25 мая 2011

Вам нужно реализовать -dealloc и выпустить startDate там.В противном случае это нормально.

- (void)dealloc {
    [_startDate release];
    [super dealloc];
}
2 голосов
/ 25 мая 2011

Вам нужно освободить _startDate, когда класс освобожден. Поскольку у вас есть свойство, самое безопасное, что нужно сделать, это установить его в ноль, и автоматически сгенерированный установщик позаботится о том, чтобы освободить его для вас.

- (void)dealloc
{
    self.startDate = nil;
    [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...