新手:关于类中的ios/objective-c变量定义
我是objective-c和iOS开发方面的新手。我有一个简单的问题要问: 我在一些iOS类实现文件中看到,人们使用如下代码:新手:关于类中的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
@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吗?