开发者

Getting an array of properties for an object in Objective-C

开发者 https://www.devze.com 2022-12-14 02:03 出处:网络
Is it possible to get an array of all of an object\'s properties in Objective C? Basically, what I want to do is something like this:

Is it possible to get an array of all of an object's properties in Objective C? Basically, what I want to do is something like this:

- (void)save {
   NSArray *propertyArray = [self propertyNames];
   for (NSString *propertyName in propertyArray) {
      [self doSomethingCoolWithValue:[self valueForKey:pro开发者_Go百科pertyName]];
   }
}

Is this possible? It seems like it should be, but I can't figure out what method my propertyNames up there should be.


I did some more digging, and found what I wanted in the Objective-C Runtime Programming Guide. Here's how I've implemented the what I wanted to do in my original question, drawing heavily from Apple's sample code:

#import <Foundation/NSObjCRuntime.h>
#import <objc/runtime.h>

- (void)save {
    id currentClass = [self class];
    NSString *propertyName;
    unsigned int outCount, i;
    objc_property_t *properties = class_copyPropertyList(currentClass, &outCount);
    for (i = 0; i < outCount; i++) {
        objc_property_t property = properties[i];
        propertyName = [NSString stringWithCString:property_getName(property)];
        [self doSomethingCoolWithValue:[self valueForKey:propertyName]];
    }
}

I hope this will help someone else looking for a way to access the names of an object's properties programatically.


dont forget

free(properties);

after the loop or you will get a leak. The apple documentation is clear:

An array of pointers of type objc_property_t describing the properties declared by the class. Any properties declared by superclasses are not included. The array contains *outCount pointers followed by a NULL terminator. You must free the array with free().

0

精彩评论

暂无评论...
验证码 换一张
取 消