Вы хотите использовать «расширение класса», а не категорию:
@interface MyClass ()
@property (nonatomic, retain) NSMutableArray *stuff;
@end
@implementation MyClass
@synthesize stuff; // ok
Расширения класса были созданы в Objective-C 2.0 частично специально для этой цели. Преимущество расширений классов заключается в том, что компилятор рассматривает их как часть исходного определения класса и, таким образом, может предупреждать о неполных реализациях.
Помимо сугубо личных свойств, вы также можете создавать открытые свойства только для чтения, которые предназначены только для чтения и записи. Свойство может быть повторно объявлено в расширениях класса исключительно для изменения доступа (readonly против readwrite), но в противном случае оно должно быть идентичным в объявлении. Таким образом вы можете сделать:
//MyClass.h
@interface MyClass : NSObject
{ }
@property (nonatomic,retain,redonly) NSArray *myProperty;
@end
//MyClass.m
@interface MyClass ()
@property (nonatomic, retain, readwrite) NSArray *myProperty;
@end
@implementation MyClass
@synthesize myProperty;
//...
@end