J'essaye de nettoyer mon application contre les fuites avec l'instrument de fuite. Il me montre des fuites sur XML parser (TBXML).Fuite de mémoire avec chaînes autoeleased iphone
Voici une classe que je vais créer sur l'analyse syntaxique:
@interface GraphPoint : NSObject {
NSString* x;
NSString* y;
}
@property (nonatomic, copy) NSString* x;
@property (nonatomic, copy) NSString* y;
@end
@implementation GraphPoint
@synthesize x, y;
... some calculations
- (void) dealloc
{
[x release];
[y release];
[super dealloc];
}
@end
Dans l'analyseur:
... // Une fois trouvé l'élément suivant:
NSString *str;
GraphPoint *aPoint = [[GraphPoint alloc] init];
TBXMLElement *item = [TBXML childElementNamed:kX_Item parentElement:pntItem];
str = [TBXML textForElement:item];
aPoint.x = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
item = [TBXML childElementNamed:kY_Item parentElement:pntItem];
str = [TBXML textForElement:item];
aPoint.y = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[points addObject:aPoint];
[aPoint release];
L'instrument Leaks présente une fuite dans la fonction textForElement de TBXML, qui fournit une chaîne autoeleased:
+ (NSString*) textForElement:(TBXMLElement*)aXMLElement {
if (nil == aXMLElement->text) return @"";
return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding];
}
Puisque nous parlons parfois de centaines ou même de milliers de points, ces fuites deviennent énormes. Je ne peux pas comprendre pourquoi la chaîne autoreleased produit des fuites?
Des pensées?
Merci
Merci, vous aviez raison, la fuite était ailleurs - le tableau, qui contenait des tableaux de points, n'était pas désalloué –