Копировать значения объекта - PullRequest
0 голосов
/ 12 января 2012

У меня есть метод, который получает массив, а затем сохраняет его в свойствах NSObject.

- (void)updatePoints:(NSArray *)pointArrayPassed
{
    pointArray = pointArrayPassed;
    pointCount= pointArray.count;
}

Следующий код работает, но, очевидно, сохраняет указатель pointArrayPassed, поэтому, когда я могу, он отражает вниз стек вызовов. Однако, если я использую копию pointArrayPassed, приложение начинает сильно просачиваться!

Есть ли способ в функции передавать только значения как таковые вместо указателя?

1 Ответ

2 голосов
/ 12 января 2012

Вы не можете просто хранить копии в iVar, не отпуская текущий объект.В противном случае вы потеряли указатель, на который можно отправить сообщение release - поэтому оно просачивается повсюду.

Это лучшая замена.

- (void)updatePoints:(NSArray *)pointArrayPassed
{
    if (pointArray == pointArrayPassed) {
        //the new array is the same as the current one. Do nothing
        return;
    }
    [pointArray release];
    pointArray = [pointArrayPassed copy];
    pointCount = pointArray.count;

}

Но это не самый элегантный способ сделать это.

Лучший способ - объявить pointArray как свойство с copy в качестве семантики управления памятью (что очевидно, поскольку у вас есть изменяемый/ неизменяемый кластер классов).И есть отдельный метод с именем -pointCount, который при необходимости возвращает счетчик.

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