0

2つの場所のメモリリークを示す私のコードで、私を見て助けてください。

1.FIRST

UIButton *push = (UIButton *)sender;
NSString *string = [NSString stringWithFormat:@"%@",[push currentTitle]];
NSArray *chunks = [[NSArray alloc]initWithArray:[stringcomponentsSeparatedByString:@"-"]];
list = [[NSMutableArray alloc]initWithArray:chunks];
(NSMutableArray *list;)
[chunks release];

2.2番目

これが最初のソースコードです

NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSURL *url = [[NSURL alloc]initWithString:@"http://www/absdf.com/myXML.xml"];
self.parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];
[parser release];
[url release];
[pool drain];

私がこのコードを実行している間、そしてこのInstruments Toolsを行番号:2にすると、最も重いバックトレースでメモリリークが発生します。だから理由を教えてください。

4

4 に答える 4

0

明らかに、list = [[NSMutableArray alloc]initWithArray:chunks];リリースされることはありません。

于 2012-06-18T08:06:12.073 に答える
0
self.parser = [[NSXMLParser alloc]initWithContentsOfURL:url];

alloc/initretainedオブジェクトを返します。parserプロパティが属性で宣言されてretainいる場合は、それを保持しすぎています。そのはず:

 self.parser = [[[NSXMLParser alloc]initWithContentsOfURL:url] autorelease];

listPSインスタンス変数に対して適切なメモリ管理を行っていることを確認してください。プロパティをより適切に使用できるようにするためです。

于 2012-06-18T08:08:51.813 に答える
0
  1. リストはどこか、おそらくdeallocでリリースされるはずです

    - (void)dealloc {
       [list release];
       [super dealloc];
    }
    
  2. parser = [[NSXMLParser alloc]initWithContentsOfURL:url];

また

NSXMLParser *tempParser = [[NSXMLParser alloc]initWithContentsOfURL:url];
self.parser = tempParser;
[tempParser release];
于 2012-06-18T08:09:05.357 に答える
0

他の答えに加えて、あなたのプールは解放されるべきです

NSAutoreleasePool *pool = [NSAutoreleasePool new];

//... then
[pool release];
于 2012-06-18T08:09:34.813 に答える