我看到了一个类似的问题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。