Итак, я делаю очень простое приложение для Twitter (на самом деле это Presence 2 из курса iPhone в Стэнфорде, который находится на iTunes), когда я решил, что хочу посмотреть, не протекает ли мое приложение. Итак, я запустил Leaks, и он сразу нашел его. Но когда я смотрю на трассировку стека, возникает утечка в основной функции, когда я вызываю UIApplicationMain.
На рисунке ниже показана трассировка стека от инструментов и соответствующий код в xcode. Кто-нибудь знает, как я могу остановить эту утечку и почему это происходит?
альтернативный текст http://img193.imageshack.us/img193/1237/picture2fnj.png
РЕДАКТИРОВАТЬ: Хорошо, я искал и искал и нашел, где проблема, но я все еще не знаю, что происходит. Я включил источник для TableViewController, с которым у меня проблемы.
Утечка происходит, когда я устанавливаю cell.text равным [names objectAtIndex: indexPath.row]. Что интересно, так это то, что 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