Instrumentは、substringWithRangeを使用して2行のコードでメモリリークが発生したと報告しています。私はこのコードで明示的に使われているalloc、copy、initsを持っていないので、なぜこのようなことが起こるのか分かりません。Allocまたはinitを使用していない場合でもメモリリークが発生する
メモリリークは、このコードが関連するviewControllerを閉じるときにのみ表示されます。私は何のallocsを持っていないので、何を解放いけないpInfoはのdeallocメソッドで
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
:ここ
は、問題のあるコードです。
私がここで間違っていることを誰かが私に教えてもらえれば幸いです。
スタックトレースがある
- [NSCFString substringWithRange:]
CFStringCreateWithSubstring
__CFStringCreateImmutableFunnel3
_CFRuntimeCreateInstance
おかげ -code
データとnStringとは何ですか?彼らはどこから来たのですか? – Matt
にも追加されました。また、報告されたリークの正確な行にコメントしました –