这个属性声明是什么意思?

3

我正在学习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;

Thanks a lot in advance for the help :)


在您的上下文中,头文件是什么? - Reinier Melian
3个回答

2

@property(nullable,nonatomic,copy) NSDictionary<NSString *,id> *titleTextAttributes NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

@property(nullable,nonatomic,copy): 声明一个 property。它允许是 nilnullable)。它将具有非原子语义,这与多线程有关 - 这意味着默认情况下没有同步就不是线程安全的(不用担心),当它被设置时,它会进行一次 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

@property:声明一个对象属性(在其他语言中称为 ivar 或实例变量)

(nullable,nonatomic,copy):属性的特性。 nullable 表示允许 nil 值。nonatomic 表示它不是线程安全的。

copy 告诉编译器将属性视为 value 类型,而不是 reference 类型,因此属性值将从调用者复制。

NSDictionary<NSString *,id> *:声明属性的类型。 在这种情况下,它是一个带有 NSString * 键和任何对象类型的 NSDictionary

titleTextAttributes:最后,属性的名称。

NS_AVAILABLE_IOS(5_0):一个宏,指示该属性首次可用于哪个 iOS 版本。

UI_APPEARANCE_SELECTOR;:应用于可以使用外观代理的属性。


0

头文件是为了让编译器知道你可以调用给定类的什么内容,有哪些参数等等。它们也对人们有用,可以让人们了解一个类的公共接口。

但是它们没有实现。iOS附带了公共头文件,因此您可以看到它们,但是您无法查看这些方法的实现。

如果您可以将问题扩展为更具体的内容,以便我能够提供更多帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接