2013-02-14 71 views
2

,如果im声明一个类属性,例如:正在使用保护setter和getter的属性?

@property float radius, diameter; 

这样,会在这个类来创建或从它继承的任何对象,将有自己的radiusdiameter正确的实例?

而这也意味着他们有自己的二传手和吸气器了吗?

我试图充分了解是我该如何处理在2种方式访问​​变量:

1.当我想以确保用户不与原始值搞乱。

2.当我想限制用户的实例变量,他可以访问和他不能。

TNX

回答

0

至于第一部分,是的,任何的子类将继承它,只要它们是公共的超类的属性和方法。只记得综合它们来获得吸气和吸气。

所以,如果你想有一个公共属性,不能修改:

// This returns a copy - whatever the receiver does with it doesn't affect the original 
@property (nonatomic, copy) BOOL someVariable; 

// This declares the property as only having a getter - no setter 
@property (nonatomic, readonly) NSArray *someArray; 

在你的头文件中声明被认为是公开的,除非另有规定的任何属性。如果您想拥有私人性质,实例变量或方法,在课堂上延续类别声明他们在您的实现文件:

// In your .m *above* the @implementation MyClass 
@interface MyClass() 
@property (nonatomic, strong) NSArray *myPrivateModel; 
@end 

斯坦福做iTunesU一个伟大的系列讲座,我真的建议学习的ObjectiveC

希望有帮助

+1

还要注意,您可以提供您自己的getter/setter函数,以便您不仅可以控制谁可以修改您的属性,还可以如何...例如将修改限制在有效范围内。 – mah 2013-02-14 01:11:20

+0

@ChristopherWooden谢谢你的朋友!即时学习目前正在使用Stephen G. Kochan的“Objective C编程”学习Objective C,到目前为止我确实非常喜欢它。我虽然也许在旁边做斯坦福德课程,因为我会拥有更强大的对象。但是在书中他很奇怪,他并没有使用'(非原子,只读)'或'(非原子,复制)'。只是'@property浮点半径,直径; '... – MNY 2013-02-14 02:04:10

+0

如果您正在合成属性,则生成的代码会受到它们是否为原子的影响。一个伟大的SO线程的主题可以找到[这里](http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties)。 – chrysAllwood 2013-02-14 02:24:32