ОБНОВЛЕНИЕ :Эта проблема была исправлена в Xcode 4.6!
Теперь этот метод снова работает, как предполагалось. Тем не менее, обязательно прочитайте примечания в верхней части отличного ответа Роба Нэпьера, прежде чем использовать его в своем коде.
ORIGINAL POST
(ARC, Xcode 4.3.1, iOS 5.1)
У меня есть сильное свойство типа CF (CGImage), которым я хочу автоматически управлять с помощью ARC, используя__attribute__((NSObject))
(как при сохранении и освобождении в синтезированном установщике и обнулении в 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. Может ли кто-нибудь, кто не обновлял (или знает, как изменить компилятор), возможно, подтвердить?