Как освободить статические переменные Objective-C - PullRequest
15 голосов
/ 06 апреля 2011

Вопрос StackOverflow "использование статического ключевого слова в target-c при определении кэшированной переменной" ссылается на код из примера 4 TableViewSuite Xcode , который определяет static NSDateFormatter и вызывает alloc но никогда не вызывает release.

Разве static переменные не должны быть освобождены?Если да, где в коде они должны быть выпущены?Если нет, то почему бы и нет?

Ответы [ 2 ]

16 голосов
/ 06 апреля 2011

Разве нельзя static переменные быть выпущены? Если да, где в коде они должны быть выпущены? Если нет, то почему нет?

Это зависит. Если переменная инициализируется только один раз и должна оставаться в течение всей жизни приложения, то нет, она не должна освобождаться (в любом случае ее память будет по существу освобождена при выходе из приложения). Однако, если значение статической переменной изменяется, тогда да, предыдущий объект должен быть освобожден, когда статическая переменная установлена ​​на новый объект.

2 голосов
/ 06 апреля 2011

Поскольку принятый ответ на этот вопрос уже заявляет, освобождение статических переменных невозможно.Они действуют как глобальные переменные, которые видны только вашей функции на протяжении всей жизни вашей программы.

Если вас беспокоит раздувание из-за переменных, к которым привязана эта статическая переменная, то вам следует (как-то)отпустите эти ссылки.Так, например, если ваша статическая переменная является NSMutableArray, и вы продолжаете добавлять объекты внутрь, она всегда будет расти, если в какой-то момент вы не очистите массив.

...