Để mở rộng về câu trả lời mvds' (bắt đầu viết những dòng này trước khi tôi thấy mình), đây là một chương trình mẫu nhỏ mà sử dụng API runtime Objective-C để lặp qua và thông tin in về mỗi tài sản trong một lớp học:
#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);
}
}
Output: thuộc tính
tuổi tài sản: T^q, Vage
tài sản lastName thuộc tính: T @ "NSString", &, N, VlastName
tài sản firstName thuộc tính: T @ "NSString", &, N, VfirstName
Lưu ý rằng chương trình này cần phải được biên soạn với ARC đã bật.
Nguồn
2012-02-13 23:20:14
Một câu hỏi theo dõi tốt sẽ là cách trả về các giá trị của mỗi động ... Tôi đang nghĩ tự động tạo một trình truy cập, nhưng cú pháp, tôi vẫn đang cố gắng tìm ra điều đó. –
Có một vài cách bạn có thể làm điều đó, nhưng đơn giản nhất là sử dụng KVC: 'id value = [self valueForKey: @" propertyName "]'. Có một chút phức tạp hơn, nơi bạn có cả hai nguyên thủy (int, float, vv) và đối tượng (NSString, vv) trở về các loại, nhưng tiền đề cơ bản sẽ làm việc. –
mã này bị rò rỉ như địa ngục – mvds