Управление памятью. Метод копирования - PullRequest
0 голосов
/ 21 февраля 2009

Я использую этот код для копирования и экземпляр моего класса

//Create the copy and pass it onto edit controller
PoolFacility *poolCopy = [self.thePoolFacility copy];
self.childController.thePoolFacilityCopy = poolCopy;
[poolCopy release];

Теперь, когда я смотрю переменные в отладчике, почему некоторые поля класса имеют один и тот же адрес памяти? Разве они не должны быть независимыми? По словам Apple

Протокол NSCopying объявляет метод для предоставления функциональных копий объекта. Точное значение «copy» может варьироваться от класса к классу, но копия должна быть функционально независимым объектом со значениями, идентичными оригиналу на момент создания копии.

Два экземпляра: poolCopy и оригинальный thePoolFacility

alt text

Мой метод копирования классов выглядит следующим образом:

- (id)copyWithZone:(NSZone *)zone {
    PoolFacility *copy = [[[self class] allocWithZone:zone]init];

    copy.name = [self.name copy];
    copy.type = [self.type copy];
    copy.phoneNumber = [self.phoneNumber copy];
    //make sure I get proper copies of my dictionaries
    copy.address = [self.address mutableCopy];  
    copy.webAddress = [self.webAddress copy];
    copy.prices = [self.prices mutableCopy];
    copy.pools = [self.pools mutableCopy];

    return copy;
}

1 Ответ

6 голосов
/ 21 февраля 2009

Неизменяемые классы, такие как NSString (но не NSMutableString), не должны предлагать фактическую копию, потому что они не могут быть изменены. Я предполагаю, что эти классы просто выполняют оптимизацию, которая не должна влиять на поведение копира.

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