2012-01-20 23 views

Respuesta

6

Si crea una variable estática local dentro de un método, ¿se inicializa una vez por instancia o una vez por programa?

Una vez por programa.

Incluso si está en una función de miembro de clase no estática, no está asociado con ninguna instancia de clase; solo habrá una instancia de la variable en todo el programa, inicializada solo una vez.

¿Esto difiere entre C++ y Objective-C?

En C++, se inicializa la primera vez que se llama a la función. En C (y Objective-C), se inicializa antes del inicio del programa. En la práctica, esto no hace la diferencia, ya que la inicialización no puede tener ningún efecto secundario en C.

1

Se inicializa una vez por programa.

No varía de los métodos ObjC++ a ObjC.

Podría variar si fuera C - una función C podría copiar los datos estáticos si (por ejemplo) la función fuera una función estática en línea. Por lo tanto, puede terminar con variables estáticas redundantes.

Con C++, es una vez por programa. Dentro de un método o función C exportada, es una vez por programa.

3

Objective-C no es diferente de C en ese sentido, por lo que una variable estática local dentro de un método se inicializa solo una vez en la vida del programa.

También eche un vistazo a this S.O. post, lo que podría ayudar con el uso de las variables estáticas en Obj-C.

0

En C++ se inicializa como máximo una vez por programa; la inicialización ocurre cuando el método se ejecuta por primera vez. (Específicamente cuando se ejecuta la declaración.)

0

No tiene instancias de métodos en absoluto (al menos no en el sentido de que pueda crear más de ellos).

La rareza del enlazador de módulos, obtienes una copia de cada método y una copia de cada variable estática.

6

Tenga en cuenta que en C++ si su clase o método está "modelado", se creará una variable propia estática para cada instancia de plantilla. P.ej. el uso de tres tipos diferentes de parámetros de plantilla da como resultado tres variables estáticas diferentes.

Cuestiones relacionadas