我想继承我的基类属性和方法,这些属性和方法将由我的几个派生类使用。我希望这些属性和方法受到严格的保护,以便它们仅在派生类中可见,而对任何外部类均不可见。但这总是给我一些错误。

@interface BasePerson : NSObject
@end

@interface BasePerson ()

@property (nonatomic, strong) NSMutableArray<Person*>* savedPersons;
@property (nonatomic) BOOL shouldSavePerson;

@end



@interface DerivedPerson1 : BasePerson

@end

@implementation DerivedPerson1

- (instancetype)init
{
    if (self = [super init]) {
        self.savedPersons = [NSMutableArray array];
        self.shouldSavePerson = NO;
    }

    return self;
}

它总是给我一个错误
Property 'savedPersons' not found on object of type 'DerivedPerson1 *'
Property 'shouldSavePerson' not found on object of type 'DerivedPerson1 *'

我如何在 objective-c 中利用继承,我不希望savePersons和shouldSavePerson属性对外部类可见。我只希望它们在我的基类和所有派生类中可见。

任何帮助都会很棒。谢谢

最佳答案

Objective-C没有方法的成员访问控制,但是您可以使用头文件来模拟它。

BasePerson.h

@interface BasePerson : NSObject

    @property (strong,nonatomic) SomeClass *somePublicProperty;

    -(void) somePublicMethod;
 @end

BasePerson-Private.h
#import "BasePerson.h"

@interface BasePerson ()

@property (nonatomic, strong) NSMutableArray<Person*>* savedPersons;
@property (nonatomic) BOOL shouldSavePerson;

@end

BasePerson.m
#import "BasePerson-Private.h"

...

DerivedPerson1.h
#import "BasePerson-Private.h"

@inteface DerivedPerson1 : BasePerson

 ...

@end

现在,任何#imports BasePerson.h的类都只会看到 public 方法。正如我所说,这只是在模拟访问控制,因为如果类#imports * BasePerson-Private.h“,他们将看到 private 成员;这正是C / Objective-C的样子。

10-08 03:41