Эта строка выделяет объект, затем отбрасывает его. Не выделяйте предмет, который вы не будете использовать.
STUser *mySTUser = [[[STUser alloc]init]autorelease];
mySTUser = [items objectAtIndex:indexPath.row];
Вместо этого просто объявите переменную и используйте ее.
STUser *mySTUser;
mySTUser = [items objectAtIndex:indexPath.row];
Эта строка создает новый объект и присваивает его ячейке, но это происходит каждый раз, когда ячейка используется.
asyncImage = [[[AsyncImageView alloc]initWithFrame:frame] autorelease];
[cell.contentView addSubview:asyncImage];
Вместо этого поместите все строки addSubview в условие if, где создается ячейка.
if (cell == nil) {
CGRect frame = CGRectMake(0, 0, 44, 44);
CGRect loginLabelFrame = CGRectMake(60, 0, 200, 10);
CGRect fullNameLabelFrame = CGRectMake(60, 20, 200, 10);
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
asyncImage = [[[AsyncImageView alloc]initWithFrame:frame] autorelease];
[cell.contentView addSubview:asyncImage];
loginLabel = [[[UILabel alloc] initWithFrame:loginLabelFrame] autorelease];
[cell.contentView addSubview:loginLabel];
fullNameLabel = [[[UILabel alloc] initWithFrame:fullNameLabelFrame] autorelease];
[cell.contentView addSubview:fullNameLabel];
asyncImage.tag = IMAGE_TAG;
loginLabel.tag = LOGIN_TAG;
fullNameLabel.tag = FULL_NAME_TAG;
} else ...
Единственное, что должно происходить вне этого, если блок - это присвоения свойствам, которые меняются в каждой ячейке, например [asyncImage loadImageFromURL:url];
, и присвоение текста меткам.
Эта строка присваивает свойство возможно нулевому объекту, а затем выделяет объект.
loginLabel.tag = LOGIN_TAG;
loginLabel = [[[UILabel alloc] initWithFrame:loginLabelFrame] autorelease];
Вместо этого назначьте свойство после создания объекта.
loginLabel = [[[UILabel alloc] initWithFrame:loginLabelFrame] autorelease];
loginLabel.tag = LOGIN_TAG;
В этой строке используется отформатированная строка, в которой можно выполнить простое присваивание.
loginLabel.text = [NSString stringWithFormat:@"%@",mySTUser.login];
Вместо этого, предполагая mySTUser.login, просто назначьте его напрямую.
loginLabel.text = mySTUser.login;