سؤال

هذا هو رمز cellForRowAtIndexPath الخاص بي في UITableView

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *identificadorNormal = @"Normal";

        UITableViewCell *cell;

        cell = [tableView dequeueReusableCellWithIdentifier:identificadorNormal];

        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                               reuseIdentifier:identificadorNormal] autorelease];

            UILabel * myText = [[[UILabel alloc] initWithFrame:CGRectMake(5.0, 54.0, 225, 18)] autorelease];
            [myText setTextAlignment:UITextAlignmentLeft];
            [myText setBackgroundColor:[UIColor whiteColor ]];
            [myText setClipsToBounds:YES];
            [myText setFont:[UIFont systemFontOfSize:14.0]];
            [myText setTextColor:[UIColor blackColor]];
            [myText setAlpha:0.6];
            [myText setTag: 1];
            [cell addSubview:myText];

            UILabel * labelFRE = [[[UILabel alloc] initWithFrame:CGRectMake(235.0, 54.0, 80, 18)] autorelease];
            [labelFRE setTextAlignment:UITextAlignmentCenter];
            [labelFRE setBackgroundColor:[UIColor greenColor ]];
            [labelFRE setClipsToBounds:YES];
            [labelFRE setFont:[UIFont boldSystemFontOfSize:14.0]];
            [labelFRE setTextColor:[UIColor blackColor]];
            [labelFRE setAlpha:0.75];
            [labelFRE setTag: 2];
            [cell addSubview:labelFRE];
        }

        cell.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] 
            pathForResource:[NSString stringWithFormat: @"table%d", indexPath.row] ofType:@"jpg"]];     
        NSString * preffix = [NSString stringWithFormat: @"grat%d", indexPath.row];

        UILabel *myText2 = (UILabel*)[cell viewWithTag:1];
        [myText2 setText:NSLocalizedString(preffix, @"")];

        UILabel *labelFRE2 = (UILabel*)[cell viewWithTag:2];
        [labelFRE2 setText:NSLocalizedString(@"frKey", @"")];       
        return cell;
}

هذا يتسرب مثل الجحيم. في كل مرة أقوم فيها بالتمرير على الجدول، تتم إضافة المزيد من التسريبات إلى قائمة الأدوات.

هل يمكنكم يا رفاق معرفة السبب؟

شكرا على اي مساعدة.

يحرر

بعد الجولة الأولى من التعليقات، قمت بتغيير الكود السابق إلى هذا

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identificadorNormal = @"Normal";

    UITableViewCell *cell;

    cell = [tableView dequeueReusableCellWithIdentifier: identificadorNormal];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
            reuseIdentifier:identificadorNormal] autorelease];

        UILabel * myText = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 54.0, 225, 18)];
        [myText setTextAlignment:UITextAlignmentLeft];
        [myText setBackgroundColor:[UIColor whiteColor ]];
        [myText setClipsToBounds:YES];
        [myText setFont:[UIFont systemFontOfSize:14.0]];
        [myText setTextColor:[UIColor blackColor]];
        [myText setAlpha:0.6];
        [myText setTag: 1];
        [cell addSubview:myText];
            [myText release];

        UILabel * labelFRE = [[UILabel alloc] initWithFrame:CGRectMake(235.0, 54.0, 80, 18)];
        [labelFRE setTextAlignment:UITextAlignmentCenter];
        [labelFRE setBackgroundColor:[UIColor greenColor ]];
        [labelFRE setClipsToBounds:YES];
        [labelFRE setFont:[UIFont boldSystemFontOfSize:14.0]];
        [labelFRE setTextColor:[UIColor blackColor]];
        [labelFRE setAlpha:0.75];
        [labelFRE setTag: 2];
        [cell addSubview:labelFRE];
            [labelFRE release];
    }

    cell.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] 
        pathForResource:[NSString stringWithFormat: @"table%d", indexPath.row] ofType:@"jpg"]];     
    NSString * preffix = [NSString stringWithFormat: @"grat%d", indexPath.row];

    UILabel *myText2 = (UILabel*)[cell viewWithTag:1];
    [myText2 setText:NSLocalizedString(preffix, @"")];

    UILabel *labelFRE2 = (UILabel*)[cell viewWithTag:2];
    [labelFRE2 setText:NSLocalizedString(@"frKey", @"")];       
    return cell;
}

تستمر التسريبات.لا تغيير على الإطلاق.

هل كانت مفيدة؟

المحلول

انظر الى http://imgur.com/XPRYF لا يبدو أن هذا هو التسريب الخاص بك.هل هذا على الجهاز أم في المحاكاة؟

كانت هناك تسريبات لأحداث GSE عند استخدام مقياس التسارع ولكن كان من المفترض إصلاحها في الإصدار 3.0.

حاول أيضًا تعطيل NSAutoreleaseFreedObjectCheckEnabled وNSZombieEnabled وNSDebugEnabled إذا تم تمكين أي منها لأن ذلك أدى إلى تعثر ملف التعريف لي عدة مرات.

الشيء الآخر الذي يثير فضولي هو سبب قيامك بإعداد الخلايا بشكل مختلف اعتمادًا على ما إذا كانت قد خرجت من قائمة الانتظار أم لا ولكن هذه مشكلة منفصلة.

نصائح أخرى

أود أن أتجنب autorelease هنا، لأنك على الأرجح ستقوم بإنشاء كائنات عدة مرات قبل أن تتاح الفرصة لتجمع الإصدار التلقائي للتصريف.كما أنها ليست رائعة في مواقف الأداء المكثف (مثل التمرير في الجدول).

يحرر

وأود أن أضيف، في حالة وجود ارتباك، بدلا من استخدام autorelease هنا، ستفعل بدلاً من ذلك

myThing = [[Obj alloc] initWithWhatever];
[myThing doStuff];
[cell addSubview:myThing];
[myThing release];

هل تأكدت من ذلك identificadorNormal و @"normal" هي نفسها؟إذا واصلت محاولة حذف خلية ذات معرف @"normal", ، ولكن لا يوجد أي منها، فسوف تقوم بإنشاء خلية ذات معرف identificadorNormal.إذا لم يكن هذا هو نفسه @"normal", ، فسوف تستمر في إنشاء خلايا جديدة في كل مرة يحاول فيها عرض الجدول عرض خلية.

أتساءل عما إذا كانت التسريبات تحدث عندما يقوم UIImage بتحميل الصور؟

هل يمكنك تجربة استخدام +imageNamed بدلاً من؟سيقوم UIImage بتخزين الصور مؤقتًا (لا يحدث ذلك مع +imageWithContentsOfFile:).إذا حدثت التسريبات أثناء تحميل الصور، فمن المفترض أن يقلل ذلك من التسرب قليلاً، ولكن من المحتمل ألا يؤدي إلى القضاء عليه.

NSString *imageName = [NSString stringWithFormat: @"table%d.jpg", indexPath.row];
cell.imageView.image = [UIImage imageNamed:imageName];         

لقد قمت بنسخ الكود الخاص بك في مشروعي الخاص، وقد تسرب في جهاز المحاكاة، لكنه لم يتسرب على أي من الأجهزة التي أملكها (iPhone 3GS، iPod Touch 2G).

وبافتراض أنك ترى مشكلة في جهاز المحاكاة أيضًا، أفترض أن هذا مجرد تأكيد آخر لتوصية Apple باختباره على جهاز حقيقي.

لم أنشر هنا من قبل ولست متأكدًا مما إذا كنت أتابع الموضوع بشكل صحيح.اقتراحي هو التحقق من مستوى تحسين المترجم الذي تستخدمه.في بعض المشاريع (يمكنني التفاصيل لاحقًا إذا كان هذا الأسلوب يساعد) تختفي المشكلات غير التقليدية مثل هذه باستخدام -o أو -o1.أي شيء أعلى ويبدو أن القيم التي تمت تهيئتها لمتغيرات الحالة لا يمكن الوثوق بها دائمًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top