财产公共和私人,但不受保护



我正在学习客观的C语言,我问一个简单的问题,当我这样做时:

// ParentClass.h
@interface ParentClass : NSObject
@property (read, strong) NSString *parentPublicStr;
@end
// ParentClass.m
@interface ParentClass ()
@property (readwrite, strong) NSString *parentPrivateStr;
@end
@implementation ParentClass
@synthesize parentPublicStr;
@synthesize parentPrivateStr;
@end
// Subclass SubClass.h
@interface SubClass : ParentClass
- (void) test;
@end
@implementation SubClass
- (void) test
{
 // Its not possible to do that : [self setParentPrivateStr:@"myStrin"]
 // And for parentPublicStr, it is public property so not protected, because i can change the value
 // in main.c, and it's so bad..
}
@end

我想创建一个受保护的属性:x

谢谢你。(对不起我的英语)

Objective-C 不提供受保护的方法/属性。看到这个问题。

编辑:另请参阅此答案。您仍然可以通过在类扩展中声明属性并在子类中包含扩展来练习封装。

只要使用带有下划线前缀的相同名称,就可以手动为属性创建 ivar:

@interface ParentClass : NSObject
{
    @protected
    NSString* _parentPublicStr;
}
@property (read, strong) NSString *parentPublicStr;
@end

这使得属性的合成 ivar @protected(默认值为 @private),子类可以直接使用超类的 ivar。

最新更新