Я новичок в Автоматическом подсчете ссылок с 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
.
Редактировать: Хотя отключение ARC для определенного файла является допустимым способом сделать это, я бы предпочел использовать чистый ARC во всем коде. Это удобно, когда вы делитесь определенным кодом для определенных файлов с другими, так как им не нужно изменять настройки сборки для любого конкретного файла. Чтобы использовать систему ARC для автоматического выпуска CFTypeRef, вы можете сделать это:
__attribute__((ns_returns_autoreleased))
id CGImageReturnAutoreleased (CGImageRef original) {
// CGImageRetain(original);
return (__bridge id)original;
}
А затем просто сделайте return (__bridge CGImageRef)CGImageReturnAutoreleased(myImage)
, чтобы вернуть изображение с автоматическим выпуском.