Что является лучшим местом для перезагрузки данных в UITableView или UICollectionView в IOS

Я использую AFNetworking для загрузки данных. В моем случае я загружаю данные в представление коллекции. Я загружаю данные внутри своего пользовательского метода и внутри него, я перезагружаю данные коллекционного просмотра. И я вызываю этот метод в методе viewDidLoad. Почему я спрашиваю об этом, загрузка данных занимает больше времени. Я думал, что это из-за места, где я перезагружаю данные коллекционного просмотра. Я хочу знать, могу ли я ускорить процесс, перезагружая данные коллекционного просмотра другим методом, таким как viewwillappear или любым другим. Надеюсь, что ваша помощь. Спасибо

- (void)viewDidLoad {
    [super viewDidLoad];

    [self loadcategoryData];

    SWRevealViewController *revealcontroller = self.revealViewController;
    if (revealcontroller) {
        [self.sideBarbutton setTarget:self.revealViewController];
        [self.sideBarbutton setAction:@selector(revealToggle:)];
        [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
    }

    // Do any additional setup after loading the view.
}


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];


    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

}

- (void)viewDidAppear:(BOOL)animated
{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}




- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)loadcategoryData
{
    post = nil;
    NSString *mainurl = [NSString stringWithFormat:@"some url"];
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
    [manager GET:mainurl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        posts = (NSDictionary *)responseObject;
        post = [NSMutableArray array];
        for(NSDictionary *all in posts)
        {
            Categories *category = [Categories new];
            category.title = [all objectForKey:@"catname"];
            category.firsturl = [all objectForKey:@"url"];

            [self.maincollectionView reloadData];
            //call for images

            imagespost = nil;
            NSString *imageUrl = [NSString stringWithFormat:@"%@", category.firsturl];
            AFHTTPRequestOperationManager *managerone = [AFHTTPRequestOperationManager manager];
            [managerone GET:imageUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {



                imagesposts = (NSDictionary *)responseObject;
                NSArray *resultone = [imagesposts objectForKey:@"posts"];
                imagespost = [NSMutableArray array];
                if ([resultone count]) {
                    NSDictionary *firstpost = resultone[0];
//                    Categories *newmogocat = [Categories new];


                    NSDictionary *thumbnail_images = [firstpost objectForKeyedSubscript:@"thumbnail_images"];
                    NSDictionary *thumbnail = [thumbnail_images objectForKey:@"thumbnail"];
                    category.imageOneUrl = [NSString stringWithFormat:@"%@",[thumbnail objectForKey:@"url"]];
//                    NSLog(@"%@", newmogocat.imageOneUrl);
//                    [imagespost addObject:newmogocat];

                    [post addObject:category];

                    [self.maincollectionView reloadData];
                }

            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//                
//                UIAlertView *erroralert = [[UIAlertView alloc] initWithTitle:@"Something Wrong!" message:[NSString stringWithFormat:@"%@", error.localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
//                [erroralert show];

            }];


        }

    } failure:^(AFHTTPRequestOperation *operation, NSError * responseObject) {

    }];
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return [post count];
}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CategoryCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellidentifier" forIndexPath:indexPath];
//    cell.layer.borderWidth = 2.0f;
    cell.layer.masksToBounds = NO;
    cell.layer.cornerRadius = 5.0;
    cell.layer.borderColor = [UIColor lightGrayColor].CGColor;
    cell.layer.shadowOffset = CGSizeMake(0, 1);
    cell.layer.shadowRadius = 4.0;
    cell.layer.shadowColor = [UIColor darkGrayColor].CGColor;


    [cell addSubview:cell.maintitleLabel];

    Categories *cat = [post objectAtIndex:indexPath.row];
    [self.maincollectionView reloadInputViews];
    cell.maintitleLabel.text = [NSString stringWithFormat:@" %@ ", cat.title];
    [cell.maintitleLabel sizeToFit];






    NSString *mainstring = [NSString stringWithFormat:@"%@", cat.imageOneUrl];
    NSURL *url = [NSURL URLWithString:mainstring];
//
    [cell.mainImageView setImageWithURL:url placeholderImage:nil];
//



    return cell;
}

1 ответ

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

- (id)init
{
    self = [super init];
    if (self) 
    {
        [self loadcategoryData];
    }
    return self;
}

Кроме того, я не знаю, сколько данных вы загружаете, но если вы загружаете длинный список, и это занимает много времени, то, возможно, вам следует подумать о "подкачке страниц" (то есть только о загрузке части данных и последующем запросе дополнительной информации). как пользователь прокручивает страницу вниз.

Другие вопросы по тегам