Нужно ли выпускать CGColorSpaceRef под ARC?

Допустим, у меня есть этот фрагмент кода:

CGColorSpaceRef colorSpaceRGB = CGColorSpaceCreateDeviceRGB();

CGContextSetStrokeColorSpace(context, colorSpaceRGB);
CGContextSetFillColorSpace(context, colorSpaceRGB);

После этого я немного рисую. Когда я закончу, мне нужно вручную отпустить colorSpaceRGB, если я использую ARC? Нравится:

CGColorSpaceRelease(colorSpaceRGB);

Или мне ничего не нужно делать?

Спасибо :)


person xx77aBs    schedule 24.06.2012    source источник
comment
Этот ответ хорошо объясняет, почему и когда нужно освободить какой-либо объект. Пожалуйста, проверьте: stackoverflow.com/a/21967681/2849443   -  person Pooja Shah    schedule 20.10.2015


Ответы (3)


да. Согласно документу Apple: поскольку функция CGColorSpaceRelease эквивалентна CFRelease, за исключением того, что она не вызывает ошибки, если параметр cs равен NULL. И если вы создаете, копируете или явно сохраняете объект Core Foundation, вы несете ответственность за его освобождение, когда он вам больше не нужен (см. Руководство по программированию управления памятью для Core Foundation).

person user523234    schedule 24.06.2012
comment
Кстати, это не обязательно (и невозможно) в Swift. - person bio; 17.01.2019

Обновление для Swift 4.0:

Это больше не требуется в текущих версиях Swift.

CGColorSpaceRelease(colorSpace)

Эта строка кода теперь дает следующее сообщение:

«CGColorSpaceRelease» недоступен: объекты Core Foundation автоматически управляются памятью

person Marcy    schedule 26.12.2017

Да, я так думаю, даже под АРК.

Вам необходимо вызвать CGColorSpaceRelease в соответствии с документацией CGColorSpace. Документация.

person Robotic Cat    schedule 24.06.2012