3

Parse.com バックエンドからデータを読み込みます。再利用可能なセルを使用するためのソリューションが送られてきますが、読み込み速度にまだ問題があります。これはテーブルビューにあるコーディングであり、セルを構成するためのサブクラスがあります。 (ExploreStreamCustomCell.m)

    - (ExploreStreamCustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
                        object:(PFObject *)object 
{
    static NSString *CellIdentifier = @"ExploreStreamCustomCell";

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

    // Configure the cell
    cell.listItemTitle.text = [object objectForKey:@"text"];
    cell.checkinsLabel.text = [NSString stringWithFormat:@"%@", [object objectForKey:@"checkins"]];
    cell.descriptionLabel.text = [object objectForKey:@"description"];


    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    PFFile *listThumbnail = [object objectForKey:@"header"];
    cell.listViewImage.image = [UIImage imageNamed:@"loading_image_stream.png"]; // placeholder image
    cell.listViewImage.file = listThumbnail;
    [cell.listViewImage loadInBackground:NULL];

    return cell;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [super tableView:tableView cellForNextPageAtIndexPath:indexPath];
    cell.textLabel.font = [cell.textLabel.font fontWithSize:kPAWWallPostTableViewFontSize];
    return cell;
}

//configure セルのすべてのコンテンツがセルにある場合 == nil は高速ですが、9 つの一意のデータ行のうち 3 つが表示され、それらの 3 つの一意のコンテンツ セルが 3 回繰り返されますか?

ExploreStreamCustomCell.m 内の余分なコードを編集します。

#import "ExploreStreamCustomCell.h"

@implementation ExploreStreamCustomCell

@synthesize listViewImage, 
iconLocation, 
iconPeople, 
iconCheckins, 
listItemTitle, 
locationLabel, 
peopleLabel, 
checkinsLabel, 
descriptionLabel,
listItemView;


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
        //Initialization code
        listItemView = [[UIView alloc] init];
        listViewImage = [[PFImageView alloc] init];
        iconLocation = [[UIImageView alloc] init];
        iconPeople = [[UIImageView alloc] init];
        iconCheckins = [[UIImageView alloc] init];
        listItemTitle = [[UILabel alloc] init];     
        locationLabel = [[UILabel alloc] init]; 
        peopleLabel = [[UILabel alloc] init];
        checkinsLabel = [[UILabel alloc] init]; 
        descriptionLabel = [[UILabel alloc] init];

        listViewImage.image = [UIImage imageNamed:@"nachtwacht_list_formaat.png"];
        iconLocation.image = [UIImage imageNamed:@"icon_magenta_location.png"];
        iconPeople.image = [UIImage imageNamed:@"icon_magenta_people.png"];
        iconCheckins.image = [UIImage imageNamed:@"icon_magenta_checkins.png"];
        listItemTitle.text = @"text";
        locationLabel.text = @"0,7 km";
        peopleLabel.text = @"34";
        checkinsLabel.text = @"61";
        descriptionLabel.text = @"Description text.";

        [self.contentView addSubview:listItemView];
        [self.contentView addSubview:listViewImage];
        [self.contentView addSubview:iconLocation];
        [self.contentView addSubview:iconPeople];
        [self.contentView addSubview:iconCheckins];
        [self.contentView addSubview:listItemTitle];
        [self.contentView addSubview:locationLabel];
        [self.contentView addSubview:peopleLabel];
        [self.contentView addSubview:checkinsLabel];
        [self.contentView addSubview:descriptionLabel];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];
    CGRect contentRect = self.contentView.bounds;
    CGFloat boundsX = contentRect.origin.x;
    CGRect frame;

    frame= CGRectMake(boundsX+0 , 33, 280, 124);
    listViewImage.frame = frame;
    listViewImage.contentMode = UIViewContentModeScaleAspectFill;
    listViewImage.layer.masksToBounds = YES;

    //listViewImage.backgroundColor = [UIColor lightGrayColor];

    frame= CGRectMake(boundsX+20 , 164, 12, 18);
    iconLocation.frame = frame;
    //iconLocation.backgroundColor = [UIColor lightGrayColor];

    frame= CGRectMake(boundsX+102 , 164, 24, 18);
    iconPeople.frame = frame;
    //iconPeople.backgroundColor = [UIColor lightGrayColor];

    frame= CGRectMake(boundsX+193 , 164, 20, 16);
    iconCheckins.frame = frame;
    //iconLocation.backgroundColor = [UIColor lightGrayColor];

    frame= CGRectMake(boundsX+0 , 0, 280, 33);
    listItemView.frame = frame;
    listItemView.backgroundColor = [UIColor colorWithRed:0.749 green:0.000 blue:0.243 alpha:1.000];


    frame= CGRectMake(boundsX+20 , 3, 240, 29);
    listItemTitle.frame = frame;
    //listItemTitle.textColor = [UIColor colorWithRed:250.0f/255.0f green:194.0f/255.0f blue:9.0f/255.0f alpha:0.8f];
    listItemTitle.textAlignment = UITextAlignmentLeft;
    listItemTitle.font = [UIFont boldSystemFontOfSize:15];
    listItemTitle.textColor = [UIColor whiteColor];
    listItemTitle.backgroundColor = [UIColor clearColor];
    listItemTitle.lineBreakMode = UILineBreakModeTailTruncation;
    //listItemTitle.backgroundColor = [UIColor orangeColor];

    frame= CGRectMake(boundsX+40 , 164, 57, 21);
    locationLabel.frame = frame;
    locationLabel.textAlignment = UITextAlignmentLeft;
    locationLabel.font = [UIFont boldSystemFontOfSize:12];
    locationLabel.textColor = [UIColor colorWithRed:0.749 green:0.000 blue:0.243 alpha:1.000];
    locationLabel.backgroundColor = [UIColor clearColor];
    locationLabel.lineBreakMode = UILineBreakModeTailTruncation;
    locationLabel.numberOfLines = 1;
    //locationLabel.backgroundColor = [UIColor redColor];

    frame= CGRectMake(boundsX+134 , 164, 57, 21);
    peopleLabel.frame = frame;
    peopleLabel.textAlignment = UITextAlignmentLeft;
    peopleLabel.font = [UIFont boldSystemFontOfSize:12];
    peopleLabel.textColor = [UIColor colorWithRed:0.749 green:0.000 blue:0.243 alpha:1.000]; 
    peopleLabel.backgroundColor = [UIColor clearColor];
    peopleLabel.lineBreakMode = UILineBreakModeTailTruncation;
    peopleLabel.numberOfLines = 1;

    frame= CGRectMake(boundsX+221 , 164, 51, 21);
    checkinsLabel.frame = frame;
    checkinsLabel.textAlignment = UITextAlignmentLeft;
    checkinsLabel.font = [UIFont boldSystemFontOfSize:12];
    checkinsLabel.textColor = [UIColor colorWithRed:0.749 green:0.000 blue:0.243 alpha:1.000]; 
    checkinsLabel.backgroundColor = [UIColor clearColor];
    checkinsLabel.lineBreakMode = UILineBreakModeTailTruncation;
    checkinsLabel.numberOfLines = 1;

    frame= CGRectMake(boundsX+0 , 189, 280, 55);
    descriptionLabel.frame = frame;
    descriptionLabel.textAlignment = UITextAlignmentLeft;
    descriptionLabel.font = [UIFont systemFontOfSize:13];
    descriptionLabel.backgroundColor = [UIColor clearColor];
    descriptionLabel.lineBreakMode = UILineBreakModeTailTruncation;
    descriptionLabel.numberOfLines = 3;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}


/*
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end
4

1 に答える 1

3

コードの非効率性を調査する優れた方法は、Instruments の Time Profiler ツールを使用することです。Time Profiler を使用すると、各タスクに費やされた時間をコードの行ごとに確認できます。

時間プロファイラ


プロファイリングには次の設定をお勧めします。

プロファイラーの設定


Apple の顔検出サンプル アプリから:

顔検出


次に、任意の行をダブルクリックして (パーセンテージが高いほど、そのメソッド呼び出しにより多くの時間が費やされていることを意味します)、各場所で費やされた時間をコードで確認できます。

コード分​​析


ここから、どこが非効率であるかを把握し、何が多くの時間を費やしているかを正確に把握できます。幸運を!

于 2012-07-15T21:40:25.047 に答える