en Objective-C, cómo acceder a la propiedad privada de la categoría

Quiero acceder a la propiedad privada de una clase de su categoría.

Pero para acceder a la propiedad privada, tengo que volver a declarar la misma propiedad privada en la categoría.
Si no vuelvo a declarar, obtengo un error de compilación,Property '<property name>' not found on object of type '<class name> *'.

¿Es esta la forma correcta de acceder a la propiedad privada de la clase desde la categoría?
¿Y hay mejores maneras de hacer esto?

El siguiente código es el código cuya propiedad privada se vuelve a declarar en la categoría:

ClassA.h

@interface ClassA : NSObject
-(void)method1;
@end

ClassA.m

#import "ClassA.h"

// private property
@interface ClassA()
@property (nonatomic) NSString *s;
@end

@implementation ClassA
@synthesize s;

-(void)method1
{
    self.s = @"a";
    NSLog(@"%@", [NSString stringWithFormat:@"%@ - method1", self.s]);
}
@end

ClassA + Category.h

#import "ClassA.h"

@interface ClassA(Category)
-(void)method2;
@end

ClassA + Category.m

#import "ClassA+Category.h"

// redeclare private property
@interface ClassA()
@property(nonatomic) NSString *s;
@end

@implementation ClassA(Category)

-(void)method2
{
    NSLog(@"%@", [NSString stringWithFormat:@"%@ - method2", self.s]);
}
@end


Es una buena forma de crear un archivo (ClassA + Private.m) para propiedad privada e importarlo desde ClassA.m y ClassA + Category.m:

ClassA + Private.m

@interface ClassA()
@property(nonatomic) NSString *s;
@end

Respuestas a la pregunta(1)

Su respuesta a la pregunta