2016-11-07 1 views
0

Que s'est-il passé dans MRC lorsque quelqu'un a appelé un message de libération sur la propriété déclarée comme assign.Libération sur la propriété d'affectation

Dans le fichier .h:

@property (assign) int count; 

dans .m viewDidLoad Méthode:

_count = 10; 
NSLog(_count); 
[_count release]; // According to me it may give EXC_BAD_ACCESS 
NSLog(_count); 

veux juste confirmer parce que ne pas beaucoup vieux Xcode dans lequel je peux tester MRC.

+0

Une 'release' sur une variable' int'? Je ne comprends pas comment cela devrait fonctionner, il devrait vous donner un avertissement. – Larme

+0

Je suis assez sûr qu'il vous donnera une erreur de compilation comme int n'hérite pas de NSObject, vous ne pouvez pas appeler la version sur elle. – Windindi

+0

@Windindi: Écrivez-le comme réponse. –

Répondre

1

Je suis sûr qu'il vous donnera une erreur de compilation car int n'hérite pas de NSObject, vous ne pouvez pas appeler la version. Quoi qu'il en soit, si vous considérez un NSObject avec une faible propriété, il ne se bloquera pas immédiatement lorsque vous appellerez release, car le propriétaire original de l'objet aura incrémenté le nombre de références d'objets au moins 1. Lorsque le propriétaire de l'objet sera libéré l'application va planter car elle essaiera de libérer l'objet car il est le propriétaire, mais l'objet a été désalloué car un non-propriétaire a réduit son nombre de références à tort.