0

我是 Objective-C 和 iOS 开发的新手。我有一个简单的问题要问:

我在一些 iOS 类实现文件中看到,人们使用如下代码:

@implementation BIDMyController

- (void)viewDidLoad{...}

上面的代码非常简单。但是,有时,我看到类实现的代码如下:

@implementation BIDMyController{
    NSMutableArray *names;
}

- (void)viewDidLoad{...}

唯一的区别是添加了大括号,其中包括一些变量定义。大括号和变量是什么意思?它们是定义此类私有变量的 Object-C 风格吗?有人可以向我解释吗?

4

2 回答 2

1

是的,这是一种声明仅在内部可见的实例变量(ivars)的方式。

请参阅:https ://stackoverflow.com/a/6891326/1597531

于 2013-04-26T13:53:25.577 回答
0

首先让我们解释一下什么是 iVar,然后解释一下为什么要在实现文件中声明它们:

这些被称为实例变量(iVars),它们不是专门的私有变量

您可以使用以下指令更改 iVar 的行为方式:

@private

iVar 只能由声明它的类访问。

@protected

声明它的类和任何子类都可以访问 iVar。如果您不声明指令,则默认使用该指令,并解释为什么您可能认为这是一种声明私有变量的方式。

@public

iVar 可以从 anwyehre 访问。

@package

可在应用程序或静态库的任何位置访问。

如果您对某些术语感到困惑,请不要担心。大多数时候不需要编写指令,因为@protected它是默认指令,它工作正常。

因此,iVars 声明将如下所示:

@interface BIDMyController{
   @protected
      NSString *protectedString
   @public
      NSString *publicString 
      NSString *piblicString2 //This iVar is public since it's after de @public directive

}

我在接口文件上声明变量,尽管正如您所指出的,它们可以在实现文件上声明。唯一的区别是在实现文件上声明 iVar 是隐藏私有 iVar 的一种方式。更多关于这里

于 2013-04-26T17:32:38.207 回答