Subscribe Twitter Twitter

martes, 20 de julio de 2010

La gestión memoria (I)

La gestión de memoria es fundamental hacerlo de manera correcta cuando desarrollemos cualquier aplicación tanto para iphone/ipod e ipad ya que aunque éste último disponga de mayor memoria que los anteriores si no se tiene un poco de cuidado se puede igualmente llegar a saturar y como consecuencia nuestra aplicación se cierra inesperadamente pero que no cunda el pánico ya que una vez que se vuelva a iniciar la aplicación nuestra memoria estará limpia como si tal eventualidad no hubiera sucedido. A diferencia de java en iphone sdk no disponemos de un recolector de basura que se encargue de ir liberando la memoria de las variables que no se usen.

Como ya vimos en un post anterior los objetos, arrays.... son punteros a tipos de datos o estructuras de datos y que hay que reservar memoria para el uso de los mismos por ello una vez que finalicemos el uso de una determinada variable es conveniente liberar la porción de memoria que tenía asignada para que pueda ser reutilizada por otra parte de la aplicación y de esa manera evitar que los recursos se vayan saturando por ello deberemos llamar al método release cuando queramos liberar la memoria de un determinado elemento.


NSInteger entero = [[NSInteger alloc] initWithInt:30]; // Reservamos e inicializamos el objeto de tipo entero

// codigo


[entero release] // liberamos la memoria ocupada por el objeto

11 comentarios:

Anónimo dijo...

Hola chicos,

Felicidades por ese blog.
Habeis probado ese codigo antes de publicarlo?
A lo mejor os refereis al NSNumber y no al al NSInteger.

Salu2,
StaS

Pablo dijo...

No sé si lo he entendido...
InitWithInt: 30 es que la variable se inicialice con el valor de 30, no?

Albert dijo...

Yo lo que no entiendo es NSInteger, ¿se trata de un int pero en objective-c? Por otra parte tampoco entiendo esto "initWithInt:30". Si lo podeis explicar todo esto con un comentario o en un post estaría muy agradecido.

¡Felicidades por el blog y vuestro trabajo!

Noemí dijo...

@Stas tienes razón es un NSNumber, este código no está probado (ambos tenemos el macbook en el servicio técnico, esperamos recuperarlos en breve) pero el resto de código si.

Noemí dijo...

@Pablo, si cierto el método InitWithInt:30 inicializa el objeto NSNumber con un valor de tipo numérico en concreto el 30, se puede llamar sino al método init y después asignarle un 30 pero de esta manera en una línea de código lo hacemos todo.

Noemí dijo...

@Albert es en realidad la clase NSNumber que lo que contiene es un dato de tipo entero. Es diferente al int ya que para usar una variable de tipo int como es un tipo de dato primitivo no es necesario reservar memoria y liberarla sino que directamente se declara por ejemplo: int miEntero; y se usa en cambio si en vez de usar un int usamos un objeto que contiene un tipo de dato entero esto lo hacemos porque disponemos de métodos que nos permiten hacer más cosas. Seguramente estes pensando cuando usar uno u otro, por ejemplo para un contador de un for o cosas similares se usa un int pero para almacenar información usa NSNumber, espero haberte resuelto la duda!!

Jose dijo...

Hola de nuevo !!! Entonces una dudilla tontorrona que me ha quedado, si NSNUmber es para números, entonces NSInteger para que se utiliza?

Gracias.

Saludos

Noemí dijo...

Hola José NSNumber es un objeto que tiene un dato de tipo numérico en cambio el NSInteger es un tipo de dato primitivo no sé si has visto el post que he escrito hoy sobre eso: http://helloworldiphone.blogspot.com/2010/07/diferencias-entre-nsinteger-int-y.html

Por ello si usas unas objetos de Tipo NSInteger a parte de que tienes que reservar memoria e inicializarlo para usarlos dispondrás de métodos para manejarlos.

En cambio una variable de tipo NSInteger la tienes que usar como puntero pero no es necesario reservar memoria sino que se usa directamente.

Jose dijo...

Hola Noemí, muchísimas gracias por el post de las diferencias, entre ellos tres. Te voy a proponer para cuando os venga bien, que expliquéis lo del tema de poner

@property y luego @synthesize


Es que me tiene super intrigado, porque no se cuando hay que ponerlo y cuando no, y porqué....

Saludos

Noemí dijo...

Hola José, no me extraña que te tenga intrigado no es para menos a nosotros nos pasaba igual, tiene miguilla porque es cierto que en unos sitios ves que lo ponen en otros no... no te preocupes que preparamos un post al respecto :)

Jose dijo...

Muchísimas gracias, sois geniales. Por cierto si sois de Madrid os puedo dejar mi macbook para pruebas y lo que haga falta =D

Saludos

Publicar un comentario