- (id) copyWithZone: (NSZone *) зона - утечки памяти - PullRequest
1 голос
/ 27 февраля 2011

У меня есть некоторые утечки памяти в моем приложении, и я думаю, что они происходят от моего - (id) copyWithZone: (NSZone *) метода зоны моего класса Project. Цель этой копии - создать глубокую копию, так как значения должны быть изменены, не влияя на исходные значения. Этот класс имеет собственный метод init:

- (id)initWithProjectID:(NSInteger)aProjectID name:(NSString *)aProjectName private:(BOOL)isPrivateProject userProjectOrderTieID:(NSInteger)aUserProjectOrderTieID orderID:(NSInteger)anOrderID {
self = [super init];
if (self) {
    projectID = aProjectID;
    projectName = [[NSString alloc] initWithString:aProjectName];
    isPrivate = isPrivateProject;
    userProjectOrderTieID = aUserProjectOrderTieID;
    orderID = anOrderID;
}
return self;
}

и метод копирования:

- (id)copyWithZone:(NSZone *)zone {

Project *copy = [[[self class] allocWithZone:zone]
                 initWithProjectID:projectID
                 name:projectName
                 private:isPrivate
                 userProjectOrderTieID:userProjectOrderTieID 
                 orderID:orderID];

return copy;

}

и для полноты метода dealloc:

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

Все ivars являются NSIntegers, за исключением projectName - NSString. Кто-нибудь может увидеть какие-либо проблемы с этим кодом?

1 Ответ

1 голос
/ 27 февраля 2011

Ничто не выделяется как неправильное в том, что вы опубликовали. Я подозреваю, что утечка находится где-то еще. Вы уверены, что возвращаемый скопированный объект Project правильно освобождается? Помните, что -copyWithZone: возвращает объект, который уже сохранен.

Инструмент утечки, вероятно, определил бы строку в -copyWithZone: как строку, из-за которой произошла утечка памяти, потому что ... да, но это не значит, что это место, которое вам нужно исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...