Протоколы

@protocol Named
@property NSString *name;
@end

@interface Flower : NSObject<Named>
@property NSString *name;
@end

@interface City : NSObject<Named>
@property NSString *name;
@end

@interface Star : NSObject<Named>
@property NSString *name;
@end

@implementation Flower
@end

@implementation City
@end

@implementation Star 
@end

Flower *flower = [Flower new];
flower.name = @"Rose";
City *city = [City new];
city.name = @"Rome";
Star *star = [Star new];
star.name = @"Sirius";

NSArray<id<Named>> *rows = @[flower, city, star];
NSMutableArray *names = [NSMutableArray new];
for (id<Named> row in rows) {
    [names addObject:row.name];
}

NSString *list = [names componentsJoinedByString:@", "];
//list is Rose, Rome, Sirius