Ari*_*ior 7 scope class objective-c variable-declaration
我在一本书中看到了一个显示此代码的示例:
@implementation ViewController
{
NSString *name;
}
Run Code Online (Sandbox Code Playgroud)
为什么不宣布这个@interface
?在声明变量@implementation
而不是@interface
?中有什么区别?为什么NSString
在范围内声明这个?
在该@implementation
部分中声明ivars的优点是更好的封装.这样,ivars不必出现在.h
文件中,因此对于只能看到头文件的类的外部用户来说是不可见的.这更好地隐藏了类的内部实现.
一般来说,既然属性可以有自动合成的ivars,其他的ivars可以直接在@implementation
块中声明,我认为你没有理由在你的声明中声明一个ivars @interface
(除了向后兼容性).
为什么在范围内声明这个NSString?
因为这是声明实例变量的唯一方法.否则,您将声明一个可以从同一文件中的任何位置访问的变量(请参阅其评论中链接到的BoltClock问题).