2009-04-29 5 views
6

Dans le Memory Management Programming Guide for Cocoa Apple parle d'objets de premier niveau. Ils disent que j'ai besoin d'un Outlet pour chacun d'entre eux.De quels «objets de haut niveau» parle Apple dans le Guide de programmation de la gestion de la mémoire?

S'il y a des haut niveau des objets que vous ne pas stocker dans les magasins, cependant, vous devez conserver soit le tableau retourné par le loadNibNamed: propriétaire: Options: méthode ou les objets à l'intérieur du tableau pour empêcher ces objets publié prématurément.

Alors que signifient-ils exactement avec "objet de premier niveau"? Je dirais qu'ils parlent de la vue racine et de la fenêtre. Quoi d'autre? Et est ce conseil juste pour les cas dans lesquels je voudrais charger leur plume manuellement? Ou s'applique-t-il pour n'importe quelle plume et n'importe quel cas?

+1

+1 J'apprécie vraiment vos questions sur la gestion de la mémoire. Trop souvent, nous prenons pour acquis nos pratiques de gestion de la mémoire reçues sans nous rappeler les raisons de ces pratiques. Pris ensemble, vos récents messages SO méritent d'être une FAQ Apple sur la gestion de la mémoire iphone! –

+0

Merci! Je suis sûr qu'ils vont aussi aider les autres. – Thanks

Répondre

6

Les objets de niveau supérieur sont des objets qui apparaissent dans la fenêtre principale de la plume dans Interface Builder, à l'exception du propriétaire et de l'application du fichier.

+0

En fait, sur MacOS au moins, l'application est également un objet de niveau supérieur. Le tableau NSTopLevelObjects renvoyé par loadNibNamed: owner: options :, pour une raison étrange, inclut également NSApplication. – uliwitness

3

Oui, il s'agit des cas où vous chargez la plume manuellement, sinon vous n'auriez pas appelé loadNibNamed: owner: options:.

+0

IIRC c'est vrai pour le Mac, mais pour UIKit, vous devez également conserver tous les objets de haut niveau à l'exception de la vue dans un UIViewController, sinon il sera auto-libéré après le chargement. Ou est-ce que je me trompe sur les différences ici? – uliwitness

0

Les objets qui apparaissent dans la fenêtre avec le propriétaire du fichier, le premier répondant, la vue sont des objets de premier niveau. Tout ce que vous ajoutez à la vue sera une sous-vue - toutes les sous-vues sont conservées par leur vue directe, elles n'ont donc pas besoin d'être conservées ailleurs. La vue elle-même est conservée par le contrôleur de vue, il n'est donc pas nécessaire de la conserver. Si vous ajoutez des objets sans vue ou des vues que vous ne mettez pas directement dans votre vue principale (comme les boutons de la barre d'outils qui ne s'affichent pas actuellement), vous devez les conserver ou les libérer . Ma méthode préférée pour ce faire est avec IBOutlets en utilisant @property, comme ceci:

@property(nonatomic, retain) IBOutlet UIBarButtonItem * myButton; 

Cela provoque -setMyButton: être appelé propriétaire du fichier (si ce code est propriétaire du fichier) et l'objet connecté par l'intermédiaire IB est envoyé pour être stocké dans cette propriété.

Questions connexes