Objective-C:声明私有(private)变量的不同方式。它们之间有什么区别吗?

标签 objective-c

我想到了声明私有(private)变量的不同方式。我想知道它们之间是否有任何区别。
第一种方式:

//In .h file
@interface DataExtract : NSObject
{   
    @private
    double test;
}

第二种方式:

//In .m file. test is not declared in .h file
static double test;

第三种方式:

//In .m file. test is not declared in .h file
double test;

任何帮助将不胜感激。谢谢。

最佳答案

如果您想要一个 ivar,所有这些都不是好的解决方案。 我什至倾向于在实现文件的类扩展中只使用带有自动生成的 ivar 的属性,只有一行(@synthesize 在 Objective-C 3.0 中自动生成)。

第一种方式:

是的,这是一个ivar,但你不应该在头文件中声明它,如果你声明它@private,然后使用@implementation {...} block 。在实现 block 中不需要声明@private,因为它默认为@protected,但是在实现 block 中它对子类是不可见的

第二种方式:

这是一个只在翻译单元中可见的变量,这里是 .m 文件本身。它不是整个应用程序的全局。该值对于您的类的每个实例都是持久的,因此它不是 ivar(实例变量)。

第三种方式:

那也不是ivar,它是一个默认为extern的变量,因为你没有写static。这意味着它在全局符号表中,并且可以在其他翻译单元/文件中使用,如果它们#import/#include .m 文件。

关于Objective-C:声明私有(private)变量的不同方式。它们之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18652641/

相关文章:

ios - iOS 8.1 中未调用 didUpdateUserLocation

ios - 如何将静态 UITableView 设置为 UIView 的 subview ?

objective-c - objective-c 代码中的段错误

objective-c - 如何使用 OCMock 在不同的线程上正确 stub 方法?

iphone - 使用 Facebook iOS SDK 在用户的墙上发布照片

ios - 何时注销 UIView 或 UILabel 的委托(delegate)

ios - 用自制键盘删除字符串的最后一个字符

ios - UISearchController dimsBackgroundDuringPresentation 仅当搜索文本为空时

iphone - 自动布局和ios5

iphone - Objective-c - XMLReader 无法正常工作