您好,登錄后才能下訂單哦!
最近一段時間在研究OC的運行時機制,碰到一個叫property_getAttributes函數,再此對其用法進行簡單的總結。
property_getAttributes主要用于獲取一個類的property即該property的屬性數據,也叫metadata(元數據),涉及到得運行時函數包括class_copyPropertyList,property_getName和propert_getAttributes
大體用法如下:
#import <objc/runtime.h> ...... - (void)custom{ unsigned pCount; objc_property_t *properties=class_copyPropertyList([self class], &pCount);//屬性數組 for(int i=0;i<pCount;++i){ objc_property_t property=properties[i]; NSLog(@"propertyName:%s",property_getName(property)); NSLog(@"propertyAttributes:%s",property_getAttributes(property)); } }
具體用法如下:
eg.定義了一個類CustomClass,有屬性定義如下
頭文件:
CustomClass.h #import <objc/runtime.h> ...... @property (nonatomic, strong)NSString *myName;
實現文件:
CustomClass.m @synthesize myName; - (void)printAllAttributes{ unsigned pCount; objc_property_t *properties=class_copyPropertyList([self class], &pCount);//屬性數組 for(int i=0;i<pCount;++i){ objc_property_t property=properties[i]; NSLog(@"propertyName:%s",property_getName(property)); NSLog(@"propertyAttributes:%s",property_getAttributes(property)); } }
最后的輸出結果如下:
2015-08-12 12:56:45.147 UIMenuController[1924:146558] propertyName:myName
2015-08-12 12:56:45.147 UIMenuController[1924:146558] propertyAttributes:T@"NSString",&,N,VmyName
解釋:
在上例中獲得propertyAttributes為:T@"NSString",&,N,VmyName
這是一個char *類型.
T:開頭字母
@"NSString":property的類型。@表示此property是OC類,"NSString"表明具體的OC類名。例如:
id myName;//@
UIColor *myName;//@"UIColor"
UITextField *myName;//@"UITextField"
CustomClass *myName;//@"CustomClass",為自定義類型
int myName;//i,即若為基本數據類型,則只是@encode(int)的值i
&:表明property為retain(strong),除此之外,C表示copy,assign沒有表示。
N:表示nonatomic,若為atomic則不寫。
VmyName:V開頭加property名
此外,讀寫屬性:readonly表示為R,readwrite不寫。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。