1

のサムネイル画像を含むプロファイルを読み込んでいるときに、アプリがクラッシュしUITableViewます。

画像付きのプロファイルを 5 つまで適切に読み込みます。しかし、6 番目のものを作成しているときに、テーブル ビューでプロファイルを画像とともにロードすると、クラッシュし、メモリ警告メッセージが表示されます。

実際に私は使用したことがありARCます。そのため、メモリを解放できません。autoreleasepoolを使用してメモリを解放することしかできません。

以下は、プロファイル画像を使用してプロファイルをロードするために使用しているコードですUITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:  (NSIndexPath *)indexPath 
{
     @autoreleasepool 
     {
         static NSString *CellIdentifier=@"Cell";
         UITableViewCell *cell = nil;

         cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
         if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
         }

         MyProfile * objMP1 = [GlobalgroupedProfileArray objectAtIndex:[indexPath row]];
         NSString *titleText =[@"Name: " stringByAppendingString:objMP1.Name];
         cell.textLabel.text=titleText;

         NSString *strTitle1=[@"Owner: "stringByAppendingString:[objMP1.Owner  stringByAppendingString:@"\n"]];

         NSString *strTitle2=[@"Breed: "stringByAppendingString:[objMP1.Breed stringByAppendingString:@"\n"]];

         NSString *strTitle=[[strTitle1 stringByAppendingString:strTitle2] stringByAppendingString:[@"ID Number: "stringByAppendingString:[NSString stringWithFormat:@"%@",objMP1.IDNumber]]];

        cell.detailTextLabel.text=strTitle;
        cell.detailTextLabel.numberOfLines =3;

        @autoreleasepool 
        {
            UIImageView * imageView = [[UIImageView alloc]    initWithFrame:CGRectMake(cell.frame.size.width-70-25, 15, 50, 50)];
            imageView.image = objMP1.img;
            [cell addSubview:imageView];
            imageView=nil;
        }

        @autoreleasepool 
        {
            // Load the image with an GCD block executed in another thread

            dispatch_queue_t downloadQueue = dispatch_queue_create("image downloader",  NULL);
            dispatch_async(downloadQueue, ^{

              CGSize newSize = CGSizeMake(50, 50);  //whaterver size
              UIGraphicsBeginImageContext(newSize);
              [objMP1.img drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
              UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
              UIGraphicsEndImageContext();

              dispatch_async(dispatch_get_main_queue(), ^{
                  @autoreleasepool 
                  {
                      UIImageView * imageView = [[UIImageView alloc]  initWithFrame:CGRectMake(cell.frame.size.width-70-25, 15, 50, 50)];
                      imageView.image = newImage;
                      [cell addSubview:imageView];
                      imageView=nil;
                  }
              });
          });
              dispatch_release(downloadQueue);
          }
       [cell.imageView setImage:newImage];
       cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
       return cell;
    }
}

ヒントはありますか?

4

0 に答える 0