цель c - управление памятью - PullRequest
0 голосов
/ 12 июня 2010

Допустим, у меня есть класс

@interface Foo :NSobject  
{  
  NSstring *a;  
  NSDate *b;  
}  
Foo *temp;  

. Мой вопрос: когда я использую [temp retain], счетчик членов также сохраняется?допустим, я получил ссылку на класс из какого-то метода и хочу сохранить класс. Нужно ли мне сохранять каждого члена?

Ответы [ 3 ]

2 голосов
/ 12 июня 2010

когда я использую [temp retain], счетчик участников также сохраняется?

номер

Допустим, я получил ссылку на класс из какого-то метода и хочу сохранить класс. Нужно ли мне сохранять каждого члена?

Нет.

Время жизни членов должно управляться самим классом Foo, а не пользователем класса Foo. Если вы можете / должны изменить количество сохраненных членов, класс неправильно инкапсулирован.

0 голосов
/ 12 июня 2010

Eimantas,

Можно предположить, что если вы используете сборщик мусора.Поскольку вы не указали приложение для iPhone, я предполагаю, что вы говорите о приложении для OS X, и тогда остается вопрос, собираете ли вы Leopard или выше?

Фрэнк

0 голосов
/ 12 июня 2010

Нет, звонки [temp retain] не сохранят a и b. Типичный шаблон, который вы увидите, состоит в том, что a и b сохраняются в методе -init класса и высвобождаются в методе -dealloc, который сохраняет их до тех пор, пока объект находится. Например:

@implementation Foo

- ( id)initWithA:( NSString * )aString andB:( NSString * )bString
{
    if ( self = [ super init ]) {
        a = [ aString copyWithZone:[ self zone ]];
        b = [ bString copyWithZone:[ self zone ]];
    }

    return self;
}

- ( void )dealloc
{
    [ a release ];
    [ b release ];

    [ super dealloc ];
}

@end

В этом примере a и b автоматически сохраняются в результате вызова -copyWithZone:. Вам не нужно сохранять их самостоятельно.

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