Как мне управлять памятью для функции блока C?(Расширение Apple) - PullRequest
1 голос
/ 17 августа 2010

Apple представила замыкание в C как название «блока». Должен ли я управлять памятью для блоков? Если так, что я должен сделать?

1 Ответ

1 голос
/ 17 августа 2010

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

Решение состоит в том, чтобы использовать функцию Block_copy() всякий раз, когда вы хотите вернуть блок, и Block_release(), когда он вам больше не нужен.

Больше информации в этом учебном пособии , в котором есть отдельный раздел о блоках в C.

...