声明私有成员变量

时间:2010-08-26 01:54:21

标签: iphone objective-c properties encapsulation private-members

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

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

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

由于

1 个答案:

答案 0 :(得分: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 可见,可以获取和设置;