iphone - 声明私有(private)成员变量

标签 iphone objective-c properties encapsulation private-members

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

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

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

谢谢

最佳答案

如果您不希望其他类访问它,请在您的实现中声明@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 是可见的,可以获取和设置;

关于iphone - 声明私有(private)成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571539/

相关文章:

ios - 有没有办法在 google 日历和 ios 日历中使用 URL 字段

iPhone viewWillAppear 不触发

properties - 属性支持字段的标准命名约定是什么?

iPhone 在 CoreData 保存时崩溃

iphone - 如何在 xcode4 中进行无依赖清理

ios - OpenSSL 服务器未收到来自 WKWebView 的媒体(音频/视频)请求

objective-c - 在 objective c Linux 中编译 *.h 文件

objective-c - 为什么在添加 subview Controller 后需要再次添加 subview ?

c# - 监视给定类的属性值变化的快速方法?

python - 如何动态创建 PyQt 属性