如果我有一些IBOutlets的一类,它似乎有点傻创造这些访问。
但后来我觉得我通过存取器实例变量并不总是打破OO做法。
我也有同样的感觉的一些实例变量,不应该是公开的,我宁愿不公开一些类的内部运作。 我可以使实际的ivars私人但@property速记似乎并不能够指定知名度。 这使我不能创建存取,只是直接访问实例变量。 我不知道如果这是在虽然皱起了眉头。 是吗?
什么是社会对这个无可否认的新手问题的想法? (请忽略点语法)
如果我有一些IBOutlets的一类,它似乎有点傻创造这些访问。
但后来我觉得我通过存取器实例变量并不总是打破OO做法。
我也有同样的感觉的一些实例变量,不应该是公开的,我宁愿不公开一些类的内部运作。 我可以使实际的ivars私人但@property速记似乎并不能够指定知名度。 这使我不能创建存取,只是直接访问实例变量。 我不知道如果这是在虽然皱起了眉头。 是吗?
什么是社会对这个无可否认的新手问题的想法? (请忽略点语法)
我不知道直接访问实例变量,我想一个不应该,但对于一些变量,它只是没有意义使用存取。 喜欢的IBOutlet
是你提到的。
我只能帮你出私人存取。 用Objective-C的2.0就可以开始申报扩展 。
类扩展是像“匿名”类别,除了它们申报方法必须在主来实现
@implementation
为相应的类块。
只要把这个扩展成一个单独的头文件,你就会有私人存取不在标题可见。
公共/私人
你可以声明你的高德作为@interface文件是只读的,但随后在一个类别重新申报他们,让你的类可以改变它们。 这里有一个快速的介绍来分类 。
一个例子:
//MyClass.h
@interface MyClass : NSObject {
NSString *name;
}
@property (readonly) NSString *name;
@end
而在实现文件,你可以重新声明如下:
//MyClass.m
@interface MyClass () //declare the class extension
@property (readwrite, copy) NSString *name; //redeclare the property
@end
@implementation MyClass
@synthesize name;
@end
现在, name
属性是只读的外部类,但可以通过类通过属性语法或setter /吸气语法改变。
真正的私有的ivars
如果你想保持高德真正私有的,只能直接访问它们,而无需通过@property语法去,你可以与他们声明@private
关键字。 但你说“啊,但他们总是可以得到使用KVC的方法,如类的外部值setValueForKey:
”在这种情况下,需要看看的NSKeyValueCoding协议类方法+ (BOOL)accessInstanceVariablesDirectly
停靠此。
IBOutlets作为属性
该建议的方法是使用@property和@synthesize。 对于Mac OS X,你可以声明为只读属性。 例如:
//MyClass.h
@interface MyClass : NSObject {
NSView *myView;
}
@property (readonly) IBOutlet NSView *myView;
@end
//MyClass.m
@implementation MyClass
@synthesize myView;
@end