我正在使用一个标准的现代单例类,其中一个单例持有 CTFontRef,如下所示:
@interface MySingleton : NSObject {
CTFontRef paintingFont;
}
@property (readonly) CTFontRef paintingFont;
@end
@implementation MySingleton
+ (MySingleton*)sharedInstance
{
static dispatch_once_t once;
static MySingleton *sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
//NB
sharedInstance->paintingFont =
CTFontCreateWithName(CFSTR("Helvetica"), 80.0, nil);
});
return sharedInstance;
}
@end
然后我在其他地方打电话[[MySingleton sharedinstance] paintingFont]
。
但是,这个调用会返回nil
,直到我paintingFont
像这样插入下划线:
sharedInstance->_paintingFont =
CTFontCreateWithName(CFSTR("Helvetica"), 80.0, nil);
为什么是这样?编译器不应该要求我包含下划线吗?如果不是,早期版本的目的是什么?这个下划线是从哪里来的?我从来没有用下划线声明属性,我只是在调试器窗口中看到这些看似随机的插入到变量名中。