Освобождение строк - PullRequest
       8

Освобождение строк

1 голос
/ 03 февраля 2010

У меня возникло сомнение, что когда должны быть освобождены строки. У меня нет выделения строки, есть ли необходимость в освобождении строки?

Ответы [ 3 ]

0 голосов
/ 03 февраля 2010

Вы создали строку с помощью вызова alloc, new или метода, содержащего copy?Вы явно retain строка?Если вы получили NSString от CFStringRef, вы создали CFStringRef с функцией, включающей create?Если нет, вам не нужно ничего делать. Если вы это сделали, вы должны либо release, либо autorelease строка.

0 голосов
/ 18 августа 2012

Правила размещения / освобождения объекта

Вам необходимо позвонить [Object release] тогда и только тогда, когда:

  • Вы позвонили [Object alloc]
  • Вы позвонили [Object retain]
  • Вы позвонили [Object new]

Если вы не указали или не сохранили объект явным образом, вам нужно освободить его.Если вы получили объект с помощью метода класса, метод сделал что-то вроде этого: return [[[Object alloc] init] autorelease];.Это выделяет новый объект, но автоматически высвобождается, когда NSAutoReleasePool в следующий раз получает шанс.

0 голосов
/ 03 февраля 2010

Нет, если вы не «выделяете» строку, которую они автоматически освобождают. например

NSString *aTestString = [NSString stringWithFormat:@"Hello %@",@"World"];

Эта строка автоматически освобождается, поэтому вам не нужно вызывать [aTestString release];

Если вы сделаете:

NSString *aTestString = [[NSString alloc] initWithFormat:@"Hello %@",@"World"];

Тогда вам нужно будет выпустить его с помощью [aTestString release]; потому что вы выделены вручную. Поэтому имеет смысл автоматически выпустить его, чтобы вам не приходилось думать об этом позже

NSString *aTestString = [[[NSString alloc] initWithFormat:@"Hello %@",@"World"] autorelease];

Но это было бы так же, как первый фрагмент кода, который я дал тебе. Возвращаясь к делу, нет, вам не нужно вручную разблокировать его, если вы не выделяете его самостоятельно.

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