Xcode代码完成中类扩展中方法的可见性

时间:2011-08-15 15:39:26

标签: xcode code-completion class-extensions

我看到了一个类似的问题differences of the code completion between Xcode 3.2 and Xcode 4。我的问题解决了Xcode(3.2)的特定行为。

当我在类扩展中声明“私有”方法时,这些方法在代码完成列表中可见,在这些方法中它们不应该是可见的。

一个例子(AClass.m):

#import "AClass.h"

@interface AClass()
- (void)someMethod;
@end

@implementation AClass
//...
- (void)someMethod
{
    // do something here
}
//...
@end

当我将AClass.h导入到其他类并创建一个AClass-instance ...

AClass *test = [[AClass alloc] init];

Xcode的代码完成显示“私有”方法“someMethod”:

[test som     // Shows someMethod, though it shouldn't be visible here

此时,这个方法是可见的,即使它不应该是,因为它在这里是未知的 - 它没有在头文件中定义。如果我在那时发送消息[test someMethod]并构建该东西,我会收到警告,该对象可能没有响应 - 正如预期的那样。

它确实做出了回应,但这是令人困惑的行为,特别是对于想要使用我的课程的其他人。

这也会影响@property / @synthesize,因为它们“只是替代方法”。我希望通过属性访问我的所有私有ivars,a)具有同质代码,同时b)能够影响ivars的使用(如懒惰实例化)。另一方面,使用我的类的任何人都不应该看到所有私有内容(在代码完成中),以便更容易使用它们。

有没有办法改变这种行为?

是否缺少Xcode 3.2中的上下文验证原因,为什么代码完成会显示这种方法,哪些方法不可见?

Xcode 4中的行为是否有所不同(因为上下文验证)?

我仍然使用Xcode 3.2,因为我想在切换之前完成一个项目并使自己适应Xcode 4。

0 个答案:

没有答案