【发布时间】:2011-01-21 17:59:34
【问题描述】:
Instruments 报告我在使用 substringWithRange 的 2 行代码中出现内存泄漏。我没有在这段代码中明确使用任何分配、复制或初始化,所以我不明白为什么会发生这种情况。
只有在与这段代码相关的viewController关闭时才会出现内存泄漏。
这是有问题的代码:
NSString* path = [[NSBundle mainBundle] pathForResource:@"radio" ofType:@"txt"
inDirectory:@""];
NSString* data = [NSString stringWithContentsOfFile:path encoding:
NSUTF8StringEncoding error: NULL];
NSString *nString;
NSString *nHolder;
NSString *iHolder;
NSMutableArray *sHolder = [[[NSMutableArray alloc] init]autorelease];
for (int i=0; i<data.length; i++)
{
nString = [data substringWithRange:NSMakeRange(i, 1)];
if ([nString isEqualToString: comma])
{
if (commaCount == 0)
{
// LEAK Reported from the below line
nHolder = [data substringWithRange:NSMakeRange(i-rangeCount,
rangeCount)];
}
else if (commaCount == 1)
{
// LEAK Reported from the below line
iHolder = [data substringWithRange:NSMakeRange(i-rangeCount,
rangeCount)];
}
}
pInfo *myInfo = [[[pInfo alloc] init] autorelease];
myInfo = nHolder;
myInfo = iHolder;
}
和 pInfo
@interface pInfo : NSObject
{
NSString *name;
NSString *info;
}
@property(nonatomic, retain) NSString *name;
@property(nonatomic, retain) NSString *info;
-(id)init;
@end
在 pInfo 的 dealloc 方法中,我没有释放任何东西,因为我没有分配。
如果有人能告诉我我在这里做错了什么,我将不胜感激。
堆栈跟踪是
-[NSCFString substringWithRange:]
CFStringCreateWithSubstring
__CFStringCreateImmutableFunnel3
_CFRuntimeCreateInstance
谢谢 -代码
【问题讨论】:
-
什么是data和nString,它们从何而来?
-
添加了这一点。还评论了报告的泄漏的确切行
标签: iphone objective-c