在@implementation中声明变量

时间:2011-10-30 18:50:30

标签: objective-c class scope variable-declaration

我在一本书中看到了一个显示此代码的例子:

@implementation ViewController
{
    NSString *name;
}

为什么不在@interface中声明这一点?在@implementation而不是@interface中声明变量的区别是什么?为什么在范围内声明此NSString

1 个答案:

答案 0 :(得分:8)

@implementation部分声明ivars的优点是更好的封装。这样,ivars不必出现在.h文件中,因此对于只能看到头文件的类的外部用户是不可见的。这更好地隐藏了类的内部实现。

一般来说,现在属性可以自动合成的ivars和其他ivars可以直接在@implementation块中声明,我认为你没有理由在@interface中声明一个ivars (除了向后兼容性)。

  

为什么在范围内声明这个NSString?

因为这是声明实例变量的唯一方法。否则,您将声明一个可以从同一文件中的任何位置访问的变量(请参阅其评论中链接到的BoltClock问题)。