【问题标题】:Variable Declaration in Objective-C - interface vs implementation [duplicate]Objective-C中的变量声明-接口与实现[重复]
【发布时间】:2013-07-30 20:19:51
【问题描述】:

这两者有什么区别:

@interface MyClass ()
{
    BOOL newUser;
}

或者

@implementation MyClass
{
BOOL newUser;
}

@end

【问题讨论】:

  • 在第二种情况下,即使是实例变量的存在,类的用户也不知道,只有类本身知道。然而,在第一种情况下,无论谁导入带有类声明的标头,都会知道有一些名为 this 和 that 的实例变量,即使它们被声明为 @private@protected@package
  • @H2CO3 第一个是类扩展名(很可能是.m,而不是.h)。
  • @rmaddy 没错(不过,术语不是我的主要观点)。
  • @H2CO3 但关键是,由于第一个是 .m 文件中的类扩展名,因此没有人会导入它,并且 ivar 是私有的。
  • @H2CO3 但我一直在谈论第一种情况,而不是第二种情况。

标签: ios objective-c


【解决方案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

【讨论】:

  • 第一个声明在类扩展中,它可能不在(通常不在)公共标头中。此外,扩展中声明的变量默认是私有的,而不是@protected
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
相关资源
最近更新 更多