Подтвердить что ты не робот

В 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


Это хороший способ создать файл (ClassA + Private.m) для частной собственности и импортировать его из ClassA.m и ClassA + Category.m:

ClassA + Private.m

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

Ответ 1

Лучший способ решить это - создать ClassA+Private.h и импортировать его в ClassA.m и Category.m. Помните h в конце, вам нужно только объявить свои частные свойства и методы там, определение лучше сохранится в ClassA.m.