2014-01-17 159 views
0

如果我有一類這樣的:我可以訪問Objective C中實例變量的名稱嗎?

@interface Fields : NSObject { 
@public 
NSString* location; 
NSString* keywords; 
} 
@end 

我可以訪問的位置,不僅值&關鍵字,但也是這些變量的名字?即「位置」和「關鍵字」?這些名稱將在計算機之間傳遞,不會顯示給用戶。

或...我使用字典並保持代碼和數據分開嗎?

+1

我認爲這是不同之處在於,屬性和實例變量之間的差異。雖然密切相關! – Carl

+1

@Carl雖然你可以這樣做,但我建議不要這樣做。這種元編程實際上與ObjC的設計模式有些相似,並且沿着這種路線往往會導致痛苦的調試和維護問題。 – bbum

+0

謝謝@bbum。我同意你的觀點,雖然這種訪問在某些語言中得到了完全支持,但我們沒有被打敗的Obj C路徑。我將使用不同的方法,並在數據中複製變量名稱。對於那些想要這樣的解決方案的人,我會留下Aaron Brager的答案。 – Carl

回答

1

您可以使用class_copyIvarList獲得一個班級的ivars列表。

例如:

unsigned int count = 0; 
Ivar* ivars = class_copyIvarList([self class], &count); 
for(int i = 0; i < count; ++i) { 
    NSLog(@"%@::%s", NSStringFromClass([self class]), ivar_getName(ivars[i])); 
} 
free(ivars); 
+0

別忘了'#import ' – Lance

相關問題