Добрый день. Не так давно передо мной встала задача добавить свойство к уже существующему классу(у меня это был UIButton) начал искать, и на странице эплов нашел то, что мне было нужно. А теперь подробнее, что же именно я там нашел.
В Objective-C есть такая замечательная вещь как рантайм он позволяет творить чудеса, если знать как этим пользоваться. Эту возможность я тут и буду использовать.
Сначала необходимо добавить в проект файл категории для требуемого объекта, в итоге если категория называется AddProperty, а целевой класс UIButton, то название файла будет таким: UIButton+AddProperty.

Далее, в файл UIButton+AddProperty.h пишем следующее:

@interface UIButton (AddProperty)
@property(retain,nonatomic) NSString* someText; // добавляемое свойство
@end
Тут все понятно, теперь нужно синтезировать это свойство, обычным способом этого не сделать. Переходим в файл UIButton+AddProperty.m, подключаем заголовочный файл #import . Среди все прелестей доступных нам после подключения этого файла, в данный момент нас интересуют следующие две функции:
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
id objc_getAssociatedObject(id object, const void *key)

в целом, я думаю понятно что они делают.
Сейчас приведу рабочий код с этими функциями, а затем разберем все:

#import "UIButton+AddProperty.h"
#import
static NSString* keyProperty = @"keySomeTextProperty";
@implementation UIButton (AddProperty)
-(void) setSomeText:(NSString *)someText{
    objc_setAssociatedObject(self, keyProperty, someText, OBJC_ASSOCIATION_RETAIN_NONATOMIC); // устанавливаем пару ключ-значение
}
-(NSString*) someText{
    id value = objc_getAssociatedObject(self, keyProperty); // получаем объект по ключу
    return (NSString*)value;
}
@end
Теперь подробности:
функция void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
четыре параметра:
object — объект, для которого создается свойство
key — ключ, обеспечивающий уникальность свойства, в рамках данного объекта(понятно, что он долежн быть уникален)
value — значение свойства
policy — политика присовения свойств. На выбор есть несколько вариантов, в зависимости от требуемого эффекта(их можно посмотреть в файле runtime.h):
OBJC_ASSOCIATION_ASSIGN
OBJC_ASSOCIATION_RETAIN_NONATOMIC
OBJC_ASSOCIATION_COPY_NONATOMIC
OBJC_ASSOCIATION_RETAIN
OBJC_ASSOCIATION_COPY
Названия этих констант соответствуют требуемой политики поведения свойств в присвоении объектов.
функция id objc_getAssociatedObject(id object, const void *key)
имеет всего два параметра:
object — объект, у которого мы ищем данное свойство
key — ключ для поиска
Возвращает нам эта функция указатель на объект, сам объект мы потом без проблем приводим к нужному нам типу.

Вот в общем-то и все, что необходимо, для того, что бы добавить требуемое свойство в уже существующий класс. Добавление методов к существующему классу тут намеренно не рассматривалось, т.к. этой информации везде хватает, а по поводу добавления свойст ее не особо-то и много, только на stackoverflow нашел что-то внятное, но потом дочитывал на developer.apple.com откуда и была взята основная информация.