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

时间:2016-06-27 20:37:46

标签: ios objective-c iphone xcode

所以我正在学习一些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;

非常感谢您的帮助:)

3 个答案:

答案 0 :(得分: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 :(得分: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附带公共标题,因此您可以看到它们,但您无法看到这些方法的实现。

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