In Objective-C erfahren Sie, wie Sie auf Privateigentum aus der Kategorie zugreifen

Ich möchte auf Privateigentum einer Klasse aus ihrer Kategorie zugreifen.

Aber um auf Privateigentum zuzugreifen, muss ich dasselbe Privateigentum in der Kategorie neu deklarieren.
Wenn ich nicht neu deklariere, erhalte ich einen Kompilierungsfehler.Property '<property name>' not found on object of type '<class name> *'.

Ist dies der richtige Weg, um auf Privateigentum einer Klasse aus einer Kategorie zuzugreifen?
Und gibt es dafür bessere Möglichkeiten?

Der folgende Code ist der Code, den Privateigentum in der Kategorie neu deklariert:

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


Auf diese Weise können Sie eine Datei (ClassA + Private.m) für Privateigentum erstellen und aus ClassA.m und ClassA + Category.m importieren:

ClassA + Private.m

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage