risposta

7

È probabile che si verifichi un arresto anomalo del sistema quando l'oggetto viene normalmente rilasciato automaticamente. autorelease significa "rilascio ritardato", quindi verrà rilasciato: solo più tardi. Dato che l'oggetto non esisterà più tardi mentre lo si sta scaricando manualmente, è probabile che si verifichi un arresto anomalo a causa del runtime che invia il messaggio -release all'oggetto now-deallocated.

Modifica: si noti che se si esegue il ripristino automatico degli oggetti -retain, è necessario farlo -release: si acquisisce la proprietà.

+1

Diciamo che (per qualsiasi motivo) io * lo * voglio che venga rilasciato in questo momento. "[[Obj retain] release]" è un'opzione valida? – noamtm

+2

Non proprio. In tal caso, dovresti racchiudere l'intera cosa in @autoreleasepool {} per creare e distruggere il pool in cui si sta verificando l'autorelease. –

+0

d'accordo, avvolgere l'intera cosa in @autoreleasepool –

1

Mi rendo conto che questo è stupido ora, e che non dovrei rilasciare qualcosa che non possiedo.

+0

Non stupido - Voglio davvero fare la stessa cosa! – Brad

0

Se non si desidera che l'oggetto vada nel lotto di rilascio automatico, è possibile eseguire un manuale alloc e initWithCapabity. Se lo fai, dovrai farlo manualmente a release ad un certo punto.