J'ai créé une catégorie NSString personnalisée qui me permet de trouver toutes les chaînes entre deux autres chaînes. Je rencontre maintenant le problème de trouver qu'il y a beaucoup de fuites de kBs de mon script. S'il vous plaît voir le code ci-dessous:Big Fuite dans Objective-C Catégorie
#import "MyStringBetween.h"
@implementation NSString (MyStringBetween)
-(NSArray *)mystringBetween:(NSString *)aString and:(NSString *)bString;
{
NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
NSArray *firstlist = [self componentsSeparatedByString:bString];
NSMutableArray *finalArray = [[NSMutableArray alloc] init];
for (int y = 0; y < firstlist.count - 1 ; y++) {
NSString *firstObject = [firstlist objectAtIndex:y];
NSMutableArray *secondlist = [firstObject componentsSeparatedByString:aString];
if(secondlist.count > 1){
[finalArray addObject:[secondlist objectAtIndex:secondlist.count - 1]];
}
}
[autoreleasepool release];
return finalArray;
}
@end
Je reconnais que je ne suis pas super bien à libérer des objets, mais je l'avais cru que le NSAutoreleasePool a traité les choses pour moi.
La ligne qui fuit:
NSMutableArray *secondlist = [firstObject componentsSeparatedByString:aString];
libérant manuellement secondlist déclenche une exception.
Merci d'avance!
http://stackoverflow.com/questions/65427/how-does-the-nsautoreleasepool-autorelease-pool-work –
Btw, votre fonction retourne un tableau au lieu d'une chaîne. –
Aussi, sauf si vous appelez cette méthode sur un thread sans un pool autorelease l'encapsulant, vous ne devriez pas avoir besoin de créer un nouveau pool autorelease juste pour cette méthode. Si vous l'appelez sur le fil principal, vous en avez probablement un pour vous. – Sam