,如果你不希望它的其他类访问,宣布对你实行@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是可见的,可以被get和set;
来源
2010-08-26 02:07:27
vfn
好吧,所以使用一个类别我可以完全隐藏一个成员变量。但是我仍然不明白为可见成员使用“只读”的原因,因为它将引用返回给对象。人们可以修改引用并在其上写下,即使它没有setter。 – 2010-08-26 02:41:15
好点!我将尝试调查目标-c给予的保护目标。我的猜测是,只要您尝试更改被引用对象的值,它就会创建一个副本,并且更改不会传播到受保护的对象。这里是文档:http://developer.apple.com/mac/library/documentation/cocoa/conceptual/objectivec/Articles/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW19 – vfn 2010-08-26 03:14:00
@Oliver ,你会介意为此创建另一个问题,并将你的代码放在那里,让我们更好地理解这个问题。 BTW“无法识别的选择器”意味着你没有那个特定的选择器,可以是属性或方法。你确定你已经声明了“readwrite”权限吗? – vfn 2011-09-18 23:34:07