clang編譯后的attribute屬性
clang -rewrite-objc main.m -o main.cpp編譯后生成的main.cpp文件中含有attribute
@property(nonatomic,copy)NSString *nickName;
@property(nonatomic,strong)NSString *name;

attribute@2x.png
static struct /*_prop_list_t*/ {
unsigned int entsize; // sizeof(struct _prop_t)
unsigned int count_of_properties;
struct _prop_t prop_list[2];
} _OBJC_$_PROP_LIST_DCPerson __attribute__ ((used, section ("__DATA,__objc_const"))) = {
sizeof(_prop_t),
2,
{{"nickName","T@\"NSString\",C,N,V_nickName"},
{"name","T@\"NSString\",&,N,V_name"}}
}
查閱官方文檔
獲取某個(gè)對(duì)象的成員變量
/*
property_getAttributes(<#objc_property_t _Nonnull property#>)
class_copyPropertyList(<#Class _Nullable __unsafe_unretained cls#>, <#unsigned int * _Nullable outCount#>)
*/
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(pClass, &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));
}
//輸出
nickName T@"NSString",C,N,V_nickName
name T@"NSString",&,N,V_name

20.gif
打印出來(lái)的attribute分別代表什么呢?
T:type類(lèi)型 NSString 類(lèi)型
C:copy
N:nonatomic
V:variable變量

propertyTypeString@2x.png