precios - iphone españa
Cómo encontrar el tamaño de cualquier objeto en iOS (5)
Estaba optimizando mi aplicación y quería saber cuánto es el tamaño del objeto, para que también pueda mostrarlo en el registro.
supongo que tengo
NSDictionary *temp=(NSDictionary*)[Data objectAtIndex:i];
//data is defined in the .h file
ahora cómo sabré cuánto es el tamaño de la temperatura del objeto.
Intenté usar la vista de variable y en la sección de temperatura encontré el instance_size = (long int) 30498656
¿El tamaño_instancia es el tamaño exacto de mi objeto temporal ?.
también intenté
sizeof(temp);
pero se estrelló en ese punto. Alguna ayuda...
El compilador solo conoce el puntero, y es por eso que siempre devolverá el tamaño del puntero. Para encontrar el tamaño del objeto asignado, pruebe algo como
NSLog(@"size of Object: %zd", malloc_size(myObject));
La temp
variable es una dirección de memoria. No podemos obtener el tamaño de la memoria del objeto mediante la programación. Podemos usar el instrumento Allocations para optimizar la aplicación en xcode. Haga clic en Command+I
en xcode4, puede encontrarlo.
Sugiero utilizar class_getInstanceSize
y malloc_good_size
para ver qué va a hacer. Esto no mostrará los ivars y whatnot dentro del tamaño devuelto.
#import <malloc/malloc.h>
#import <objc/runtime.h>
NSLog(@"Object Size: %zd", malloc_good_size(class_getInstanceSize([yourObject class])));
En objetivo C:
NSString *sampleString = @"iOS Programming";
NSLog(@"size of object: %zd", malloc_size((__bridge const void *)(sampleString)));
You need to include:
#import<malloc/malloc.h>
En Swift:
var name: String = "Hello World!"
sizeofValue(name)
var someValue: Double = 10.5
sizeofValue(someValue)
En primer lugar, creo que está claro en las publicaciones anteriores que el tamaño del objeto está dado por malloc_size(myObject)
, como lo sugiere Legolas y también en el manual de referencia de Mac OS :
La función malloc_size (ptr) devuelve el tamaño del bloque de memoria que respalda la asignación apuntada por ptr. El tamaño del bloque de memoria siempre es al menos tan grande como la asignación que respalda, y puede ser más grande.
Pero si está interesado en conocer el tamaño del diccionario, tenga en cuenta el siguiente punto:
El diccionario almacena pares clave-valor y no contiene el objeto en sí en la parte de valor, sino que simplemente aumenta un conteo retenido del objeto que se iba a "agregar" y mantiene una referencia de ese objeto consigo mismo. Ahora, el diccionario mismo contiene las referencias a los diversos objetos (con una clave adjunta). Entonces, si por casualidad está buscando el tamaño del objeto de todos los objetos a los que hace referencia el diccionario, técnicamente ese no sería el tamaño del diccionario. El tamaño del diccionario sería la suma del tamaño de todas las teclas más el tamaño de todas las referencias de valor contra las teclas más el tamaño del NSObject padre. Si todavía está interesado en conocer el tamaño de los objetos referidos también, intente iterar sobre la matriz de valores del diccionario:
NSArray *myArray = [myDictionary allValues];
id obj = nil;
int totalSize = 0;
for(obj in myArray)
{
totalSize += malloc_size(obj);
}
//totalSize now contains the total object size of the refered objects in the dictionary.
Referencia