iphone - Avec un NSArray de références d'objet, est-ce que je libère explicitement tous les objets dans le tableau ou juste le tableau lui-même?




objective-c memory-management (4)

NSArray conserve les objets lorsqu'ils sont ajoutés et les libère lorsqu'ils sont supprimés ou que le tableau est désalloué. Gardez cela à l'esprit, c'est ce concept de «propriété» qui repose sur la gestion de la mémoire de conservation / libération. C'est la même chose avec l'objet qui possède le tableau, s'il a également retenu les objets dans le tableau, vous devrez leur envoyer un autre message de libération dans votre implémentation de dealloc. Si ce n'est pas le cas, et si aucun autre objet ne les retient, ils seront libérés une fois que le tableau les aura libérés.

Ma classe a un NSArray rempli d'objets. Dans ma méthode dealloc, puis-je simplement appeler release sur mon NSArray, ou dois-je répéter le tableau et relâcher tous les objets en premier?


Vous devriez pouvoir libérer NSArray et libérer tous ses objets, que vous ayez ou non d'autres références. Si vous avez un objet d'instance qui existe également dans NSArray, vous devrez libérer cet objet explicitement - juste libérer NSArray ne peut pas libérer l'objet en dehors du contexte de tableau.


Vous pouvez appeler la version directement sur NSArray . L'implémentation de NSArray prendra soin d'envoyer la release à tous les objets stockés dans le tableau.


La transparence ne fonctionne que pour iOS 8, il faut vérifier pour iOS 7

Dans ViewController, définissez la transparence comme suit:

SKView *skView = (SKView *)self.mySKView;
SKScene *skScene = [MyScene sceneWithSize:skView.bounds.size];
skScene.scaleMode = SKSceneScaleModeAspectFill;
skView.allowsTransparency = YES;
[skView presentScene: skScene];

Dans MyScene.m, définissez l'arrière-plan comme couleur claire:

self.scene.backgroundColor = [UIColor clearColor];





iphone objective-c memory-management