CellForRowAtIndex leaks

  • CellForRowAtIndex leaks

    Hey Leute,

    was ist denn an diesem Code falsch? Wenn ich den mit Instruments tracke bekomme ich Leaks.

    Quellcode

    1. - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. NewsCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    4. if(cell == nil)
    5. cell = [[NSBundle mainBundle] loadNibNamed:@"NewsCollectionViewCell" owner:self options:0][0];
    6. cell.mainLabel.text = [news[indexPath.row] valueForKey:@"pagetitle"];
    7. cell.subtitleLabel.text = ([((NSString *)[news[indexPath.row] valueForKey:@"introtext"]) isEqualToString:@""]) ? [StringHelper stringByStrippingHTML:((NSString *)[news[indexPath.row] valueForKey:@"content"])] : ((NSString *)[news[indexPath.row] valueForKey:@"introtext"]);
    8. cell.dateLabel.text = [NSString stringWithFormat:@"%@",[news[indexPath.row] valueForKey:@"publishedon"]];
    9. cell.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9];
    10. return cell;
    11. }
    Alles anzeigen
    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de
  • nussratte schrieb:

    ist 5 und 6 nicht überflüssig?
    du registrierst ja die Cell und dequeue gibt dir immer eine entsprechende Cell zurück
    a) das sollte wie gesagt auch weg können, du bekommst da immer eine korrekte Cell zurück, in das If dürfte er niemals reinspringen
    b) warum benutzt du valueForKey? und nicht objectForKey?
    c) nur mal als Tipp: solltest du deinen Code etwas aufräumen, schon alleine deine News als Variable rauszuziehen macht das ganze um einiges lesbarer
    wenn du

    Quellcode

    1. [news[indexPath.row]

    in

    Quellcode

    1. NSDictionary *oneNews = [news[indexPath.row];
    rausziehen würdest, wären alle nachfolgenden Zeilen verständlicher
    zu mal du dann auch noch einen Schritt weitergehen kannst, wenn du denn dein (NSString *) brauchst, machst du das auch davor, dann machst du das auch nur einmal

    d) was du "hinter" ? und : dem label zuweisen möchtest, würde ich wahrscheinlich auch in variablen schieben, dann wird deine Zuweisung nochmal deutlich übersichtlicher und im debugger kannst du dann auch einfacher sehen was da drin ist
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint: