tutorial programación objective lenguaje descargar caracteristicas objective-c autorelease

objective-c - programación - objective c vs swift



¿Cómo saber si un objeto es lanzado automáticamente o no? (2)

La propia firma del método te lo dice. El patrón de los métodos con firmas como "classNameWithData: data1: data2" es devolver una instancia alloc / init / autorelease de esa cosa. Son conveniencias para que no tengas que hacerlo.

Si no desea una versión autorelease de algo, entonces no cree una instancia de esa manera, y use la asignación / iniciación adecuada, y libérela cuando haya terminado. Este método es mucho más explícito, y un poco más propenso a errores porque si se lanza una excepción, se puede pasar por alto el bloqueo de la versión, pero ese es el precio que paga por tenerlo así.

Me estoy molestando un poco por el hecho de que algunos objetos se hayan lanzado automáticamente sin que yo lo sepa. Probablemente sea bueno que lo sean, pero si lo son, quiero saberlo. La documentación no dice qué métodos se activan automáticamente, por lo que normalmente pruebo mi camino hacia adelante, lo que en mi opinión es una tontería. Por ejemplo, [NSDate date] lanza automáticamente el objeto, y también lo hace [NSArray arrayWithObjects: ...]. ¿Cómo lo sabes sin que te lo diga la documentación?

Estoy empezando a ver un patrón, aunque métodos como estos, los que crean objetos con una función estática, siempre devuelven el objeto lanzado automáticamente. ¿Es esto siempre cierto?


Básicamente, si init , copy o retain un objeto, usted es responsable de liberarlo. Si no lo haces, no eres responsable de liberarlo.

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

Muchas clases proporcionan métodos de la forma + nombre de clase ... que puede usar para obtener una nueva instancia de la clase. A menudo denominados "constructores de conveniencia", estos métodos crean una nueva instancia de la clase, la inicializan y la devuelven para que la use. Si bien puede pensar que es responsable de liberar los objetos creados de esta manera, no es el caso de acuerdo con la política de propiedad establecida anteriormente. Debido a que la clase crea el nuevo objeto, es responsable de eliminar el nuevo objeto.