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