要通過property_get訪問對象屬性,需要使用Objective-C的運行時(runtime)庫來獲取對象的屬性信息。以下是一個簡單的示例代碼來演示如何通過property_get訪問對象屬性:
#import <objc/runtime.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
@implementation Person
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
person.name = @"John";
person.age = 30;
unsigned int count;
objc_property_t *properties = class_copyPropertyList([person class], &count);
for (int i = 0; i < count; i++) {
objc_property_t property = properties[i];
const char *name = property_getName(property);
NSString *propertyName = [NSString stringWithUTF8String:name];
id propertyValue = [person valueForKey:propertyName];
NSLog(@"Property: %@, Value: %@", propertyName, propertyValue);
}
free(properties);
}
return 0;
}
在上面的代碼中,我們首先定義了一個包含兩個屬性的Person類,并在main函數中創建了一個Person對象。然后,我們使用class_copyPropertyList函數來獲取Person類的所有屬性,并通過property_getName函數獲取每個屬性的名稱。最后,我們通過KVC(Key-Value Coding)機制來獲取對象的屬性值并打印出來。
請注意,由于property_getName函數返回的是C字符串,所以我們需要使用NSString的initWithUTF8String函數將其轉換為NSString對象。另外,記得在使用完class_copyPropertyList函數后,要調用free函數來釋放內存。