2011-04-19 11 views

Respuesta

0

Una vez que haya determinado objeto autorelease llamada, ahora se han dado a su responsabilidad liberación autorelease pool, ahora es al igual que no es dueño de ella .. Se mostrará un comportamiento aleatorio que puede bloquearse o, a veces no. (depende del momento en autorlease piscina liberarlo, si su lanzamiento a continuación, que se colgará)

+0

Esto no es exactamente exacto. Permanecerá válido hasta que se vacíe la piscina. No solo comenzará repentinamente a estrellarse porque se ha lanzado de forma automática. – Chuck

+0

sí, eso es lo que escribí en la última línea. Como no sabemos qué rodea el código dado, nunca podemos estar seguros de ello (ya sea que haya sido drenado o no). – Ravin

26

vamos a desglosarlo:

[Ball alloc]: Esto crea un objeto de la bola que poseemos (y por lo tanto necesitamos para liberar).

[[Ball alloc] init]: Esto inicializa el objeto Ball que acabamos de crear.

[[[Ball alloc] init] autorelease]: Esto agrega la Bola al grupo de autorrelease actual, por lo que se liberará cuando se vacíe ese grupo. Esto es lo correcto si, por ejemplo, devolviéramos la Bola de un método.

[[[[Ball alloc] init] autorelease] autorelease]: Esto libera automáticamente el objeto Ball. Esto es 100% incorrecto. alloc es el único reclamo de propiedad que debemos equilibrar, por lo que la Bola ahora se lanzará demasiadas veces. Esto podría manifestarse de muchas maneras, pero probablemente solo se bloquee.

+0

Intento esto [[[Ball alloc] init] liberación automática] liberación automática]; y no se bloqueará. ¿podría decirme cuándo se bloqueará? –

+0

@SachinKumaram: Es un comportamiento indefinido. No hay garantías En general, tiende a tener más probabilidades de bloquearse a medida que se asignan más objetos. – Chuck

1

Respuesta corta: Se produce un accidente.

Cuestiones relacionadas