如果在方法中创建局部静态变量,是每个实例初始化一次,还是每个程序初始化一次?
这在C ++和Objective-C之间有区别吗?
答案 0 :(得分:6)
请注意,在C ++中,如果您的类或方法是“模板化”的,那么将为每个模板实例化创建一个自己的静态变量。例如。使用三种不同的模板参数类型会产生三种不同的静态变量。
答案 1 :(得分:6)
如果在方法中创建局部静态变量,是每个实例初始化一次,还是每个程序初始化一次?
每个节目一次。
即使它在非静态类成员函数中,它也不与任何类实例相关联;在整个程序中只有一个变量实例,只初始化一次。
这在C ++和Objective-C之间有区别吗?
在C ++中,它是在第一次调用函数时初始化的。在C(和Objective-C)中,它在程序启动之前初始化。在实践中,这没有什么区别,因为初始化不能在C中产生任何副作用。
答案 2 :(得分:3)
在这方面,Objective-C与C没有区别,因此方法中的局部静态变量在程序生命周期中只被初始化一次。
还要看看this S.O. post,它可能有助于你如何在Obj-C中使用静态变量。
答案 3 :(得分:1)
每个程序初始化一次。
从ObjC ++到ObjC方法没有变化。
如果它是C,则可能会有所不同 - 如果(例如)函数是静态内联函数,则C函数可以复制静态数据。因此,您最终可能会得到冗余的静态变量。
使用C ++,每个程序只需一次。在方法或导出的C函数中,每个程序只需一次。
答案 4 :(得分:0)
在C ++中,每个程序最多初始化一次;首次执行该方法时会发生初始化。 (特别是在执行声明时。)
答案 5 :(得分:0)
您根本没有实例的方法(至少在您可以创建更多方法的意义上)。
Modulo链接器很奇怪,每个方法都有一个副本,每个静态变量都有一个副本。