Objective-C中的变量声明 - 接口 vs 实现

3
这两者有何不同:
@interface MyClass ()
{
    BOOL newUser;
}

或者

@implementation MyClass
{
BOOL newUser;
}

@end

1
在第二种情况下,即使实例变量存在,用户也不会知道类的使用者,只有类本身知道。然而,在第一种情况下,无论是私有的、受保护的还是包内的,只要导入了带有类声明的头文件,都会知道存在一些名为this和that的实例变量。 - user529758
@H2CO3 第一个是类扩展(很可能在.m文件中,而不是.h文件中)。 - rmaddy
@rmaddy 没错(不过,术语并不是我的重点)。 - user529758
4
但重点是,由于第一个是在 .m 文件中的类扩展,没有人会导入它,实例变量也是私有的。 - rmaddy
1
@H2CO3 但我在谈论第一种情况,而不是第二种。 - rmaddy
显示剩余2条评论
1个回答

1
在你的接口中声明的变量,如1.所示,在实例化MyClass对象的其他类中可见。在2.中声明的变量只能在MyClass内部可见。 这是你应该阅读的内容: http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/ 编辑:@JoshCaswell是正确的。 1.是匿名类别。它的变量将根据接口声明的位置而被看到。阅读更好的链接: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html

1
第一个声明在类扩展中,通常不会出现在公共头文件中。此外,在扩展中声明的变量默认为私有,而不是@protected - jscs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接