бесплатные объекты для мостов, сохранение и освобождение - PullRequest
1 голос
/ 01 января 2012

Я сейчас смотрю на NSMutableSet, созданный функцией CFSetCreateMutable(). В документации говорится, что возвращаемое значение CFSetCreateMutable() является бесплатным по мосту, а это означает, что я могу просто преобразовать его в NSMutableSet. Означает ли это, что отправка сообщения release является абсолютно верной? Всегда ли я могу предположить, что могу всегда обращаться с такими объектами, как если бы они были alloc 'обработаны через NS-класс?

Ответы [ 2 ]

7 голосов
/ 01 января 2012

Просто представьте, что CFSetCreateMutable() эквивалентно [[NSMutableSet alloc] init] в том смысле, что вы должны освободить объект после того, как с ним покончено. Если вы используете ARC, вы можете привести CFMutableSet к NSMutableSet, используя мостовое приведение: (__bridge_transfer NSMutableSet *)theCFSet. Это скажет ARC, что он ответственен за выпуск набора после того, как он выходит из области видимости.

1 голос
/ 01 января 2012

В документации говорится, что возвращаемое значение CFSetCreateMutable () является бесплатным по мосту, что означает, что я могу просто преобразовать его в NSMutableSet. Означает ли это, что отправка сообщения о выпуске является действительной?

Да. Это явно гарантировано в документах :

Обратите внимание на пример, что функции и методы управления памятью также взаимозаменяемы - вы можете использовать CFRelease с объектом Какао и release и autorelease с объектом Core Foundation.


Всегда ли я могу предположить, что могу всегда обращаться с такими объектами, как если бы они были распределены через NS-класс?

Не совсем: В настоящее время , все, что существует между CFType и NSObject, например -description / CFCopyDescription, работает независимо от того, как вы создали объект, но не все они явно гарантированно работает как сообщения управления памятью.

...