не очень отзывчивый - PullRequest
       5

не очень отзывчивый

0 голосов
/ 26 апреля 2011

Мое приложение реагирует слишком медленно, я полагаю, что я не загружаю изображения асинхронно, но даже если я делаю это все еще, то просмотр таблицы делает загрузку моего контроллера слишком медленной.Код для просмотра таблицы приведен ниже:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
    UILabel *productNameLbl = [[UILabel alloc] initWithFrame:CGRectMake(83, 8, 200,10)];
        [productNameLbl setFont:[UIFont boldSystemFontOfSize:12.0]];
        [productNameLbl setTag:20];
        [cell.contentView addSubview:productNameLbl];
        [productNameLbl release];


}

else {
    AsyncImageView *oldImage = (AsyncImageView*)[cell.contentView viewWithTag:299];
    [oldImage removeFromSuperview];
}


NSString *baseImageURL = @"http://samplesite.com/";

AsyncImageView* asyncImage = [[[AsyncImageView alloc] initWithFrame:CGRectMake(5, 5, 70, 70)] autorelease];
asyncImage.tag = 299;
NSMutableString *url = [[NSMutableString alloc] initWithString:@""];
NSString *iconUrl = [NSString stringWithString:[[[[[DataCollection sharedObject] categoryProducts ] productsList ]objectAtIndex:indexPath.row] productImage]];

[url appendString:baseImageURL];
[url appendString:iconUrl];
NSURL *imageURL = [NSURL URLWithString:url];
[asyncImage loadImageFromURL:imageURL];
[cell.contentView addSubview:asyncImage];

[(UILabel *) [cell viewWithTag:20] setText:[NSString stringWithString:[[[[[DataCollection sharedObject] categoryProducts ] productsList ]objectAtIndex:indexPath.row] productName]]];
//..... rest of the code

Что я на самом деле хочу, так это сначала загрузить представление, а затем загрузить изображения и остальные данные.Скажите, пожалуйста, как мне сделать мой стол более отзывчивым?

Ответы [ 4 ]

2 голосов
/ 26 апреля 2011

Вы создаете все метки каждый раз, когда отображается ячейка. Вы должны либо добавить тег ко всем ярлыкам и найти их через тег. Так что не создавать их.

Или лучше создайте пользовательскую tabelCell со всеми необходимыми элементами управления.

Вы можете установить асинхронное изображение в методах UITableViewDelegate willDisplayCell: AtIndex: затем проверить какой-нибудь локальный кэш, если изображения уже были загружены. Посмотрите на ASIHttpRequest, в котором есть отличная система кеширования, которая очень проста в использовании.

1 голос
/ 27 апреля 2011

это было намного проще и действительно решило проблему :) http://ezekiel.vancouver.wsu.edu/~wayne/yellowjacket/YellowJacket.zip

1 голос
/ 26 апреля 2011

Если вы сделаете всю эту часть своего кода aysnc, ваш код будет очень гладким (хотя учтите ваши утечки + выделения).

NSMutableString *url = [[NSMutableString alloc] initWithString:@""];
NSString *baseImageURL = @"http://samplesite.com/";
NSString *imagePath = [NSString stringWithString:[[[[DataCollection sharedObject] popularProducts]objectAtIndex:indexPath.row] productImage]];

[url appendString:baseImageURL];
[url appendString:imagePath];
NSURL *imageURL = [NSURL URLWithString:url];

NSData *data = [NSData dataWithContentsOfURL:imageURL];
UIImage *img = [[UIImage alloc] initWithData:data cache:NO];
UIImageView *imageView = [[UIImageView alloc] initWithImage:img];
[imageView setFrame:CGRectMake(10, 10, 70, 70)];
[cell addSubview:imageView];
[imageView release];
0 голосов
/ 27 апреля 2011

У Apple есть проект LazyTableImages , который конкретно занимается этой проблемой.Возможно, эта модель поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...