,如果你不希望它的其他類訪問,宣佈對你實行@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