2010-10-03 44 views
1

我在我的iPhone应用程序的几个变量作为类的实例变量(他们需要,因为他们是在该类的多种方法中使用私人实例变量 - iPhone SDK

不过,我不希望它们暴露于父类的。我已经看到了@private关键字,但我不知道这是否是适当的使用或不使用。

有谁如何保持实例变量为私有的类?

这可能也是一个Objective-C问题,并不一定是特定于iphone的。

非常感谢, 布雷特

+0

实例变量永远不会“暴露给父类” – user102008 2011-07-27 02:15:07

回答

1

@private让你的意图明确,就是要走的路。

编辑:

@interface YourClass : NSObject { 
@private 
    int privateData; 
@public 
    int publicData; 
} 

// method declarations.... 

@end 
+0

我还没有能够找出如何实现@private。有任何想法吗?我在哪里把它放在一组变量中?我将如何区分那些我想要公开的人?非常感谢! – Brett 2010-10-03 17:48:30

+0

用一个例子编辑。 – Eiko 2010-10-03 17:56:22

+0

这可以使用类方法吗? IE浏览器。 @private - (void)method1; – Brett 2010-10-03 18:13:49

0

的@private指令表示实例变量只能在声明它的类访问。如果您希望子类能够访问实例变量,请使用@protected指令。当你说你不希望你的实例变量暴露给父类类时,我不确定你的意思,但我很确定@private是你想要的。

您使用的指令是这样的:

@interface MyClass : NSObject { 
@private 
    float privateFloat; 
    float anotherPrivateFloat; 
@protected 
    float protectedFloat; 
@public 
    float publicFloat; 
} 

实例变量的默认范围的保护。

+0

完美!感谢大家! – Brett 2010-10-03 17:53:21

+0

方法如何?有没有办法通过使用@private指令来保持它们私密? – Brett 2010-10-03 18:17:06

+0

不是我所知道的。您可以使用名称为空的类别来隐藏方法声明来声明“私有API”,但据我所知,隐私不是强制执行的。这就是为什么你听说iPhone应用程序因被称为Apple的“私人”方法而被拒绝的原因。看看这个问题:http://stackoverflow.com/questions/172598/best-way-to-define-private-methods-for-a-class-in-objective-c – 2010-10-03 19:14:31

0

Objective C中的类实例变量(假设您的意思是一个变量,可以在一个对象中设置并读入同一类中的另一个对象)与普通ANSI C中的静态全局变量相同(假设您将一个类在一个.m文件中执行)。

静态全局变量不会暴露给包含这些类实例变量的实现文件之外的任何其他类(super,sub,alien等)或代码。

@private声明在这里的其他答案中的东西很可能是不正确的(取决于你的术语是什么意思),因为那些实例变量将不具有类范围的范围,但是对于每个单独的对象是私有的(除非由财产暴露)。

+0

布雷特问他可以使用的变量几种方法 - 不能在多个实例之间共享。另外,Obj-C中没有真正的“类变量”(至少它们与类方法相比不是同一级别)。 – Eiko 2010-10-03 21:03:22