属于子类的私有属性

时间:2014-12-10 10:22:33

标签: objective-c iphone xcode oop

我有一个继承自A类的B类。 我想在A类中声明一些属性并在其中导入一些类但是我不想将这些属性或类暴露给类b的用户

简单来说,我想找到一种方法来声明只能由子类使用的属性,而不是那些导入子类的属性

1 个答案:

答案 0 :(得分:0)

这是完全可能的,事实上是良好的做法。

在A.h中,您应该只导入绝对必要的内容,例如包含您必须公开遵守的协议的标头。所需的任何其他类都应预先定义@class@protocol。声明您可以只读的任何属性。

@class SomeObject

@interface ClassA : NSObject
@property (strong, nonatomic, readonly) NSString *id;
@property (strong, nonatomic, readonly) SomeObject *object;
@end

在A.m中,您应该私下导入所需的任何标头。此外,实现类别扩展并将任何只读属性重新声明为readwrite。

#import "SomeObject.h"

@interface ClassA ()
@property (strong, nonatomic, readwrite) NSString *id;
@property (strong, nonatomic, readwrite) SomeObject *object;
@property (strong, nonatomic, readwrite) NSString *entirelyPrivate;
@end

@implementation A
. . . . etc

如果您希望将这些值提供给子类,而不是其他类,则可以将它们放在一个类别中。这也是由Apple框架中的几个类完成的。

例如,创建一个文件ClassA+Subclass.h并包含:

@interface ClassA (SubclassOnly)
@property (strong, nonatomic, readwrite) NSString *id;
@end

然后只需在需要' protected'的子类的实现中导入它。访问。