Respuesta

7

Es probable que se bloquee cuando el objeto se soltará automáticamente. autorelease significa "liberación retardada", por lo que se lanzará: justo después. Dado que el objeto no existirá más adelante, ya que lo liberará manualmente, es probable que falle debido al tiempo de ejecución que envía el mensaje -release a su objeto ahora desasignado.

Editar: Tenga en cuenta que si -retain objetos que se lanzan de forma automática, tiene que -release ellos: se está apropiando.

+1

Digamos que (por alguna razón) * quiero * que se publique en este momento. ¿Es "[[obj retener] versión]" una opción válida? – noamtm

+2

No realmente. En ese caso, debe envolver todo en @autoreleasepool {} para crear y destruir el grupo en el que se está produciendo la liberación automática. –

+0

acuerde, ajuste todo en @autoreleasepool –

1

Me doy cuenta de que esto es estúpido ahora, y que no debería liberar algo que no me pertenece.

+0

No es estúpido - ¡Realmente quiero hacer lo mismo! – Brad

0

Si no desea que el objeto entre en el grupo de liberación automática, puede hacer un manual alloc y initWithCapabity. Si lo hace, tendrá que hacerlo manualmente release en algún momento.

Cuestiones relacionadas