我创建了一个自定义NSString类别,它允许我找到两个其他字符串之间的所有字符串。我现在遇到的问题是发现我的脚本中有很多KB漏掉了。请参阅以下代码:
#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
我承认我不擅长发布物品,但我相信NSAutoreleasePool为我处理了一些事情。
漏水线:
NSMutableArray *secondlist = [firstObject componentsSeparatedByString:aString];
手动释放第二个列表会引发异常。
提前致谢!
答案 0 :(得分:3)
不,这是泄漏的行:
NSMutableArray *secondlist = [[NSMutableArray alloc] init];
并不是那么大的漏洞(只是一个空的可变数组)。不过,不要这样做。
特别是,行:
secondlist = [[firstlist objectAtIndex:y] componentsSeparatedByString:aString];
通过引用分配空的可变数组。
FinalArray
也应命名为finalArray
。
答案 1 :(得分:1)
finalArray正在泄漏。您应该在返回之前自动释放它,但请确保在分配自动释放池之前或释放之后执行此操作。