Problème avec NSMutableData
regatta
Membre
Bonjour,
j'ai un problème avec une données de type NSMutableData !
Voici le code :
Dans la méthode applicationDidFinishLaunching, j'initialise la NSMutableData et je vérifie le type de la donnée.
la valeur de name est NSConcreteData et non NSConcreteMutableData
Pourquoi tant de haine
Cela doit être simple, mais je sèche depuis un moment !
Merci pour vos lumières
j'ai un problème avec une données de type NSMutableData !
Voici le code :
<br />#import <Cocoa/Cocoa.h><br /><br />@interface TestAppDelegate : NSObject <NSApplicationDelegate> <br />{<br /> NSWindow *window;<br /> NSMutableData *donnees;<br />}<br /><br />@property (assign) IBOutlet NSWindow *window;<br />@property (readwrite, copy) NSMutableData *donnees;<br />@end<br />
Dans la méthode applicationDidFinishLaunching, j'initialise la NSMutableData et je vérifie le type de la donnée.
<br />#import "TestAppDelegate.h"<br /><br />@implementation TestAppDelegate<br /><br />- (void)applicationDidFinishLaunching:(NSNotification *)aNotification <br />{<br /> [self setDonnees:[NSMutableData dataWithLength:1]];<br /> NSString *name = [[self donnees] className];<br />}<br /><br />@synthesize window;<br />@synthesize donnees;<br /><br />@end<br />
la valeur de name est NSConcreteData et non NSConcreteMutableData
Pourquoi tant de haine
Cela doit être simple, mais je sèche depuis un moment !
Merci pour vos lumières
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faut toujours passer par les méthodes comme [tt]isKindOfClass:[/tt] pour savoir si une classe est d'un type donné. Avec les particularités des Class Clusters, ainsi qu'avec des classes qui sont toll-free-bridged avec CoreFoundation et donc ont des types internes pas forcément directement liés au nom de classe que tu manipules...
Moi ça me choque pas de voir le type NSConcreteData, c'est un type interne tu sais pas s'il est mutable ou pas... en général l'aspect "mutable" n'est géré que par le fait que l'API est exposée ou non)
Mais si je fais le test avec isKindOfClass, j'ai la même réponse : NSData et non NSMutableData !
Mais je n'ai peut-être pas compris ta réponse
As-tu essayé comme ça ?
Et avec une classe personnalisée dérivant de NSMutableData ?
Edit: Ah bah si, la documentation du protocole NSCopying indique explicitemement que la copie d'un objet mutable est immutable... Il faudrait utiliser NSMutableCopying, mais à ma connaissance rien dans les attributs de propriété ne permet de le spécifier.
The returned object is implicitly retained by the sender, who is responsible for releasing it. The copy returned is immutable if the consideration “immutable vs. mutable†applies to the receiving object; otherwise the exact nature of the copy is determined by the class.
Effectivement, avec
@property (readwrite, assign) NSMutableData *donnees;
cela marche parfaitement !
Merci à tous
Maintenant, la question que tu dois te poser, c'est "pourquoi j'avais utilisé copy", car ça peut être le signe d'une certaine confusion dans ton esprit pour tout ce qui concerne la gestion mémoire.
Du coup je rejoins zoc sur une probable confusion dans ton esprit sur la gestion mémoire...