w Objective-C, jak uzyskać dostęp do własności prywatnej z kategorii

Chcę uzyskać dostęp do prywatnej własności klasy z jej kategorii.

Ale aby uzyskać dostęp do własności prywatnej, muszę ponownie zaznaczyć tę samą własność prywatną w kategorii.
Jeśli nie redeclare, otrzymuję błąd kompilacji,Property '<property name>' not found on object of type '<class name> *'.

Czy jest to poprawny sposób na dostęp do prywatnej własności klasy z kategorii?
I czy są na to lepsze sposoby?

Poniższy kod jest kodem, który własność prywatna jest redeclared w kategorii:

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

Klasa A + Kategoria.h

#import "ClassA.h"

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

Klasa A + Kategoria.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


Jest dobrym sposobem na utworzenie pliku (ClassA + Private.m) dla własności prywatnej i zaimportowanie go z ClassA.m i ClassA + Category.m:

ClassA + Private.m

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