在Objective-C中,如何从类别访问私有财产

我想访问类别的私人财产。

但要获得私人财产,我必须重新申报同一类私人财产。
如果我不重新声明,我得到一个编译错误, Property '<property name>' not found on object of type '<class name> *'

这是从类别访问课堂私有财产的正确方法吗?
有没有更好的方法来做到这一点?

以下代码是私有属性在类别中重新声明的代码:

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 

是私人财产创build文件(ClassA + Private.m),并从ClassA.m和ClassA + Category.m中导入它的好方法:

ClassA的+ Private.m

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

解决这个问题的最好方法是创buildClassA+Private.h并将其导入到ClassA.mCategory.m 。 注意h最后,你只需要在那里声明你的私有属性和方法,这个定义最好保存在ClassA.m