이 MVDS '답변을 확장하려면 여기를 통해 루프에 목표 - C 런타임 API를 사용하여 약간의 샘플 프로그램이다 (나는 그의보고하기 전에이 작업을 쓰기 시작) 그리고 클래스의 각 속성에 대한 인쇄 정보 :
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface TestClass : NSObject
@property (nonatomic, retain) NSString *firstName;
@property (nonatomic, retain) NSString *lastName;
@property (nonatomic) NSInteger *age;
@end
@implementation TestClass
@synthesize firstName;
@synthesize lastName;
@synthesize age;
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
unsigned int numberOfProperties = 0;
objc_property_t *propertyArray = class_copyPropertyList([TestClass class], &numberOfProperties);
for (NSUInteger i = 0; i < numberOfProperties; i++)
{
objc_property_t property = propertyArray[i];
NSString *name = [[NSString alloc] initWithUTF8String:property_getName(property)];
NSString *attributesString = [[NSString alloc] initWithUTF8String:property_getAttributes(property)];
NSLog(@"Property %@ attributes: %@", name, attributesString);
}
free(propertyArray);
}
}
출력 :
부동산 세 속성 : T^Q, Vage 012 3, 속성이 lastName 속성 : T의 @ "는 NSString", &, N, VlastName
속성 인 firstName 속성 : T의 @ "는 NSString", &, N, VfirstName
주이 프로그램은 ARC 컴파일 할 필요가 있음 켜져있다.
좋은 후속 질문은 각각의 동적 값을 반환하는 방법이 될 것입니다 ... 나는 접근자를 동적으로 생성한다고 생각하지만 구문 론적으로, 나는 여전히 그것을 파악하려고합니다. –
당신이 할 수있는 몇 가지 방법이 있지만, 가장 간단한 것은 KVC를 사용하는 것입니다 :'id value = [self valueForKey : @ "propertyName"]'. 기본 (int, float 등) 및 객체 (NSString 등) 반환 유형을 모두 가지고있는 경우 좀 더 복잡해 지지만 기본적인 전제가 작동합니다. –
이 코드는 지옥 같아요. – mvds