重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
最近一段時間在研究OC的運行時機制,碰到一個叫property_getAttributes函數,再此對其用法進行簡單的總結。
property_getAttributes主要用于獲取一個類的property即該property的屬性數據,也叫metadata(元數據),涉及到得運行時函數包括class_copyPropertyList,property_getName和propert_getAttributes
大體用法如下:
#import...... - (void)custom{ unsigned pCount; objc_property_t *properties=class_copyPropertyList([self class], &pCount);//屬性數組 for(int i=0;i 具體用法如下:
eg.定義了一個類CustomClass,有屬性定義如下
頭文件:
CustomClass.h #import...... @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最后的輸出結果如下:
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不寫。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文名稱:通過OC運行時(runtime)獲得類的屬性列表-創新互聯
瀏覽地址:http://www.xueling.net.cn/article/dhhgoc.html