所以我正在学习一些Xcode,今天我在网上学习了一个教程,我发现使用了属性titleTextWithAttributes
。
我正在查看头文件,我无法读取这段代码。直接来自文件。请注意,我不想了解如何使用它,而是我想了解它是如何定义的。
/* You may specify the font, text color, and shadow properties for the title in the text attributes dictionary, using the keys found in NSAttributedString.h.
*/
@property(nullable,nonatomic,copy) NSDictionary<NSString *,id> *titleTextAttributes NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
非常感谢您的帮助:)
答案 0 :(得分:2)
@property(nullable,nonatomic,copy) NSDictionary<NSString *,id> *titleTextAttributes NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
@property(nullable,nonatomic,copy)
:声明property
。允许nil
(nullable
)。它将具有与多线程有关的非原子语义 - 意味着,默认情况下,如果没有一些同步(不要担心这一点),它就不是线程安全的,并且当它被设置时,它将成为一个copy
。
NSDictionary<NSString *,id> *
- 属性的类型是将字符串映射到任何对象(id
)的字典。
titleTextAttributes
- 属性的名称
NS_AVAILABLE_IOS(5_0)
- 这是一个不会对代码执行任何操作的宏,但会让您知道自iOS 5.0以来它已可用
UI_APPEARANCE_SELECTOR的文档说:
要参与外观代理API,请使用UI_APPEARANCE_SELECTOR在标题中标记外观属性选择器。
外观属性选择器的格式必须为:
- (void)setProperty:(PropertyType)property forAxis1:(IntegerType)axis1 axis2:(IntegerType)axis2 axisN:(IntegerType)axisN;
- (PropertyType)propertyForAxis1:(IntegerType)axis1 axis2:(IntegerType)axis2 axisN:(IntegerType)axisN;
对于任何财产,您可能没有任何轴或任何数量。 PropertyType可以是任何标准iOS类型:id,NSInteger,NSUInteger,CGFloat,CGPoint,CGSize,CGRect,UIEdgeInsets或UIOffset。 IntegerType必须是NSInteger或NSUInteger;如果在轴中使用其他类型,我们将抛出异常。
答案 1 :(得分:1)
@property
:声明一个对象属性(也就是其他语言的ivar或实例变量)
(nullable,nonatomic,copy)
:属性的属性。 nullable
表示允许nil
值。 nonatomic
indicates that it's not thread-safe.
copy
告诉编译器将属性视为value
类型,而不是reference
类型,因此将从调用者复制属性值。
NSDictionary<NSString *,id>
*:声明属性的类型。在这种情况下,它是带有NSDictionary
键的NSString *
,以及值的任何对象类型。
titleTextAttributes
:最后,属性的名称。
NS_AVAILABLE_IOS(5_0)
:一个宏,指示属性首次可用的iOS版本。
UI_APPEARANCE_SELECTOR;
:应用于可以使用外观代理的属性。
答案 2 :(得分:0)
头文件可供编译器知道你可以在给定的类上调用什么,有什么参数等等。它们对于人们了解类的公共接口是什么也很有用。
他们没有实现。 iOS附带公共标题,因此您可以看到它们,但您无法看到这些方法的实现。
如果您可以将问题扩展为更具体的问题,我可能会为您提供更多帮助。