私は非常に基本的なTwitterアプリを作成しています(iTunes上のスタンフォードiPhoneコースからのプレゼンス2です)、アプリケーションが漏れていないかどうかを確認したいと思ったとき。だから私はリークスを実行し、それはバットから右に1つを見つけた。しかし、スタックトレースを見ると、UIApplicationMainを呼び出すとmain関数でリークが発生するようです。iPhoneのメモリリークが制御外になっている
以下の図は、計測器のスタックトレースとxcodeの対応するコードを示しています。誰もがこの漏れを止めることができ、どうしてそれが起こっているのか知っていますか?
alt text http://img193.imageshack.us/img193/1237/picture2fnj.png
編集:[OK]を私は検索し、検索して、問題がどこにあるかになったが、私はまだ何が起こっているのかわかりませんしました。私は問題を抱えているTableViewControllerのソースを含めました。
[名前objectAtIndex:indexPath.row]にcell.textを設定すると、リークが発生します。興味深いのは、何とか漏れているように見えるNSIndexPathだということです。 objectAtIndexメソッドを使用してメモリをどのように管理する必要がありますか?
関連のないトピックで、私の質問を編集して返信する最善の方法を投稿していますか?またはコメントに自分のコードを投稿する必要がありますか?
@implementation PersonListTableViewController
- (id)initWithStyle:(UITableViewStyle)style
{
if (self = [super initWithStyle:style])
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"TwitterUsers" ofType:@"plist"];
names = [[NSArray alloc] initWithContentsOfFile:path];
}
return self;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 0;
//return [names count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
cell.text = [names objectAtIndex:indexPath.row];
return cell;
}
- (UITableViewCellAccessoryType)tableView:(UITableView *)table accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellAccessoryDisclosureIndicator;
}
- (void)dealloc {
[names release];
[super dealloc];
}
@end
一般にコメントにコードを投稿しないでください。それは書式を破棄します。投稿を編集するのが適切です。 –
リークの兆候は実際に起こる場所ではありません。メモリが割り当てられた場所です。リークが実際に発生したとき(つまり、オブジェクトへの最後のポインタがなくなった時点)を簡単に発見する方法はありません。 –