Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新手:关于类中的ios/objective-c变量定义_Ios_Objective C_Cocoa Touch_Ios5 - Fatal编程技术网

新手:关于类中的ios/objective-c变量定义

新手:关于类中的ios/objective-c变量定义,ios,objective-c,cocoa-touch,ios5,Ios,Objective C,Cocoa Touch,Ios5,我是objective-c和iOS开发方面的新手。我有一个简单的问题要问: 我在一些iOS类实现文件中看到,人们使用如下代码: @implementation BIDMyController - (void)viewDidLoad{...} @implementation BIDMyController{ NSMutableArray *names; } - (void)viewDidLoad{...} 上面的代码非常简单。但是,有时,我看到类实现的代码如下所示: @implem

我是objective-c和iOS开发方面的新手。我有一个简单的问题要问:

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

@implementation BIDMyController

- (void)viewDidLoad{...}
@implementation BIDMyController{
    NSMutableArray *names;
}

- (void)viewDidLoad{...}
上面的代码非常简单。但是,有时,我看到类实现的代码如下所示:

@implementation BIDMyController

- (void)viewDidLoad{...}
@implementation BIDMyController{
    NSMutableArray *names;
}

- (void)viewDidLoad{...}

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

是的,这是一种声明只在内部可见的实例变量(IVAR)的方法


请参阅:

首先,让我们解释什么是IVAR,然后解释为什么在实现文件中声明IVAR:

这些被称为实例变量(IVAR),它们不是专用变量

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

@private
iVar只能由声明它的类访问

@protected
iVar将可由声明它的类和任何子类访问。如果不声明指令,则默认情况下使用该指令,并解释了为什么您可能认为这是一种声明私有变量的方法

iVar可从Anwyehr获得

@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的一种方式

您确定第二个实现是@implementation而不是@interface吗?