【发布时间】:2011-05-10 01:57:18
【问题描述】:
我创建了一个自定义 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];
手动释放 secondlist 会引发异常。
提前致谢!
【问题讨论】:
-
顺便说一句,你的函数返回一个数组而不是一个字符串。
-
另外,除非您在没有封装它的自动释放池的线程上调用此方法,否则您不需要仅为此方法创建一个新的自动释放池。如果您在主线程上调用它,您可能已经为您设置了一个。
标签: iphone objective-c memory-leaks categories nsautoreleasepool