ОБНОВЛЕНИЕ: эта проблема исправлена с Xcode 4.6!
Этот метод теперь работает по назначению. Однако, прежде чем использовать его в своем коде, обязательно прочитайте заметки в верхней части Роба Напира.
ОРИГИНАЛЬНАЯ ПОЧТА
(ARC, Xcode 4.3.1, iOS 5.1)
У меня есть сильное свойство типа CF (CGImage), которое я хочу автоматически управлять с помощью ARC с помощью __attribute__((NSObject))
(как при сохранении и выпуске в синтезированном сеттере, так и в nall'ed в dealloc) но он не работает: объект не сохраняется при назначении свойства.
Минимальный пример воспроизведения:
@interface TestClass : NSObject
@property (nonatomic, strong) __attribute__((NSObject)) CFStringRef str;
@end
// ...In some function
CFStringRef str = (__bridge CFStringRef)[NSString stringWithFormat:@"%g", 2.5];
NSLog(@"%ld", CFGetRetainCount(str));
TestClass *obj = [[TestClass alloc] init];
obj.str = str;
NSLog(@"%ld", CFGetRetainCount(str));
Что печатает "1" дважды.
Теперь странно то, что (хотя я не уверен в этом), я думаю, что он работал правильно, прежде чем я обновился до iOS 5.1 и Xcode 4.3.1 (от iOS 5 и Xcode 4.2), и с ним переключился с gdb к lldb. Может ли кто-нибудь, кто не обновил (или знает, как изменить обратно компилятор), может подтвердить?