MVDs' Yanıta genişletmek için, burada döngü Objective-C çalışma zamanı API'sini kullanan küçük örnek program (ben de onunkini görmeden bu yazmaya başladı) ve bir sınıftaki her özellik hakkında baskı bilgisi:
#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);
}
}
Çıktı:
Mülkiyet yaş niteliklerini T^q, Våge
Mülkiyet lastName niteliklerini: T @ "NSString", &, N, VlastName
Mülkiyet firstName niteliklerini: T @ "NSString", &, N, VfirstName
Not bu program ARC ile derlenmiş gerektiğini açık.
İyi bir takip sorusu, dinamik olarak her birinin değerlerini nasıl döndüreceğimiz olurdu ... Dinamik olarak bir erişimci oluşturmayı düşünüyorum ama sözdizimsel olarak, bunu anlamaya çalışıyorum. –
Bunu yapmanın birkaç yolu vardır, ancak en basit olanı KVC: 'id değeri = [self valueForKey: @" propertyName "]' dır. Hem ilkel (int, float, vb) hem de nesne (NSString, vs) dönüş türlerine sahip olduğunuzda biraz daha karmaşıklaşır, ancak temel önermeler işe yarayacaktır. –
Bu kod cehennem – mvds