Strong @property с __атрибутом__((NSObject))для типа CF не сохраняет #39;t сохраняет

ОБНОВЛЕНИЕ :Эта проблема была исправлена ​​в 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. Может ли кто-нибудь, кто не обновлял (или знает, как изменить компилятор), возможно, подтвердить?

21
задан Patrick Pijnappel 22 March 2014 в 08:30
поделиться