gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:56:43 25 4
gpt4 key购买 nike

我想到了声明私有(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com