我看到了一个类似的问题,解决了 Xcode 3.2 和 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 实例时......
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 中的行为是否不同(因为上下文验证)?
I still use Xcode 3.2, because I wanted to finish a project before switching and adapting myself to Xcode 4.