WedX - журнал о программировании и компьютерных науках

- (id)copyWithZone:(NSZone *)zone - утечки памяти

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

- (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 являются NSInteger, кроме projectName, это NSString. Может ли кто-нибудь увидеть какие-либо проблемы с этим кодом?


Ответы:


1

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

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

27.02.2011
  • Спасибо, Аллен, тогда я поищу еще, где моя утечка. 27.02.2011
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]