Я новичок в автоматическом подсчете ссылок с LLVM и Objective-C, и у меня есть вопрос о возврате CGImageRefs из моей функции Objective-C. Во времена ручного подсчета ссылок можно было просто привести CGImageRef к id
, автоматически освободить его, а затем вернуть исходный CGImageRef. В ARC, я знаю, что вы можете направить систему ARC на автоматическое освобождение и возвращение вашего сохраняемого объекта, но я не вижу способа сделать это для CFTypeRefs.
Вот что я могу сделать с отключенным ARC:
- (CGImageRef)image {
CGImageRef myImage;
id myImageID = (id)myImage;
[myImageID autorelease];
return myImage;
}
Итак, я хочу создать метод, который, используя ARC, возвращает CGImageRef, не принадлежащий вызывающей стороне. Если есть лучший способ сделать то же самое, я открыт для идей. Я знаю, что UIImage
делает нечто подобное со свойством CGImage
.
Edit: Хотя отключение ARC для конкретного файла является допустимым методом, я бы предпочел использовать чистый ARC во всем моем коде. Это удобно при совместном использовании кода для конкретных файлов с другими людьми, поскольку им не нужно будет изменять настройки сборки для любого файла. Чтобы использовать систему ARC для авторелиза CFTypeRef, вы можете сделать следующее:
__attribute__((ns_returns_autoreleased))
id CGImageReturnAutoreleased (CGImageRef original) {
// CGImageRetain(original);
return (__bridge id)original;
}
А затем просто выполните return (__bridge CGImageRef)CGImageReturnAutoreleased(myImage)
, чтобы вернуть авторелиз изображения.