Question

Parfois je me demande quand quelque chose s'autoreleased. J'ai ajouté un NSLog dans le dealloc de divers objets, mais je ne pouvais pas trouver quelque chose d'utile.

Quand est sortie de quelque chose quand autorelease est utilisé? Est-il imprévisible, ou est-il une course de fil supplémentaire? Merci.

Était-ce utile?

La solution

Lorsque le "pool autorelease expire".

Ce que cela signifie généralement, est lorsque la pile est dévidé.

Alors, pensez de cette façon - votre application est événementielles. Vous obtenez des événements qui lui sont envoyés - et ils sont traités par une série de fonctions. Lorsque chacun des retours de fonctions, et l'événement se fait en cours de traitement, autorelease sera appelée.

Cela signifie que vous pouvez compter sur un objet pour être encore en vie lorsque vous AutoRelease, et le retourner d'une fonction à l'appelant de lui. Ne vous attendez jamais à être autour lors du traitement de tout type d'événement subséquent, ou lorsqu'il est appelé en dehors de vous cadre de pile existante.

Autres conseils

De la documentation iOS

Chaque thread dans une application Cocoa maintient sa propre pile d'objets NSAutoreleasePool. Lorsqu'un se termine de fil, il libère automatiquement tous les pools de autorelease associés avec lui-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top