9

几周前我开始学习Objective-C,但我仍然不明白如何正确管理类的封装。在类中声明私有成员变量的最佳方法是什么?

似乎使用“@property”为您的成员变量设置正确的 getter/setter 是正确的方法,而不仅仅是在界面中将其声明为“@private”。但在我看来,这仍然让其他类可以访问这些变量。即使您将属性声明为“只读”,外部类也可以访问对成员变量的引用并对其进行修改!

所以我猜想声明私有成员变量的最佳方法是通过不声明属性来不包含任何 guetter/setter。我对吗?或者,还有更好的方法?

谢谢

4

1 回答 1

23

如果您不希望其他类可以访问它,请在您的实现中声明 @property,为您的类创建一个匿名类别。

头文件:

// MyClass.h
@interface MyClass : NSObject {
    NSObject *_privateObject;
    NSObject *_readonlyObject;
    NSObject *_publicObject;
}

@property (nonatomic, retain, readonly) NSObject *readonlyObject;
@property (nonatomic, retain) NSObject *publicObject;

@end

执行:

// MyClass.m
@interface MyClass ()
    @property (nonatomic, retain) NSObject *privateObject;
    // Make it writable on the implementation
    @property (nonatomic, retain, readwrite) NSObject *readonlyObject;
@end

@implementation MyClass

@synthesize privateObject = _privateObject;
@synthesize readonlyObject = _readonlyObject;
@synthesize publicObject = _publicObject;

这些是三个不同属性的示例。

  • privateObject在其他类上不可见;
  • readonlyObject可见但只读;
  • publicObject是可见的,可以获取和设置;
于 2010-08-26T02:07:27.640 回答