Управление памятью CFSTR - PullRequest
       32

Управление памятью CFSTR

6 голосов
/ 13 февраля 2012

Я использую функцию CFSTR для создания CFString из константной строки c, и я очень часто вызываю эту функцию в моем демоне.

Из документации :
Значение, возвращаемое CFSTR, имеет следующую семантику:

  1. Значения, возвращаемые из CFSTR, не освобождаются CFString - они гарантированно будет действительным до завершения программы .
  2. Вы можете сохранить и выпустить значения, возвращенные из CFSTR сбалансированным образом любой другой CFString, но вы не обязаны это делать.

Должен ли я использовать сохранение и освобождение?

1 Ответ

11 голосов
/ 13 февраля 2012

Как указано в документации, CFSTR() созданные строки остаются действительными до завершения программы. Вы можете освободить их весь день, но на самом деле они не будут освобождены. По этой причине нет необходимости явно сохранять / освобождать их. Допустимо сохранять / освобождать их, потому что в противном случае вы не могли бы передать их через другой код, который сохраняет / освобождает их (методы фреймворка и т. Д.). Относитесь к ним так же, как к литералам NSString, созданным с использованием @"", то есть нет необходимости сохранять или освобождать их после создания, но если вы пишете код, который может принимать любую CFString, вам нужно следовать обычным правилам управления памятью в том числе с использованием CFRetain() и CFRelease().

...