سؤال

أواجه مشكلة في نمو HEAP والعناصر المستمرة التي تظهر في "تخصيصات الأدوات" عندما أقوم بإضافة عرض فرعي وأعود إلى الأصل.العرض الفرعي عبارة عن عرض فارغ بسيط مع زر رجوع تمت إضافته بواسطة IB.

في الأدوات أرى هذا عندما أكرر نفس الإجراء 6 مرات باستخدام "وضع علامة على الكومة".السيكل هو :انقر فوق الزر الموجود في الأصل لإضافة عرض فرعي والعودة إلى زر الرجوع الأصلي في العرض الفرعي:

enter image description here

أعتقد أنه سيكون صفر!هو عمل بسيط جدا.

الكود الذي أستخدمه لتحميل العرض الفرعي في View1Controller.m هو:

View2Controller *jv;    
jv = [[View2Controller alloc] initWithNibName:nil bundle:nil];
[self.view addSubview:jv.view]; 

وفي View2Controller.m أعود

-(IBAction) Back {
    [self.view removeFromSuperview];
    self.view = nil;
}

ما الخطأ الذي افعله؟

شكرا لك مقدما.

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

المحلول

عندما تستخدم [self.view removeFromSuperview]; ال self.view تم إلغاء ربطه ببرنامج الإشراف الخاص به ولكن لم يتم إصداره.وبالتالي فإن بصمة الذاكرة تنمو.

لتجنب تسرب الذاكرة، يجب عليك تحرير الذاكرة عن طريق استدعاء release الطريقة على مثيل View2Controller الذي تم إنشاؤه في ملف View1Controller.m الخاص بك.

على سبيل المثال، يمكنك حفظ المرجع إلى نسخة View2Controller التي تم إنشاؤها عن طريق تعيين خاصية (خاصية jv في هذا المثال):

View2Controller *view2controllerInstance = [[View2Controller alloc] initWithNibName:nil bundle:nil]; // create the new instance
self.jv = view2controllerInstance; // memorize the reference
[view2controllerInstance release]; // release the property on view2controller
[self.view addSubview:self.jv.view]; // add the subview

ال jv يجب تعريف الخاصية بخصائص الإعلان على النحو التالي:

@property (retain, nonatomic) View2Controller *jv;

نصائح أخرى

في كتلة التعليمات البرمجية الثانية الخاصة بك:

-(IBAction) Back {
    [self.view removeFromSuperview];
    self.view = nil;
}

إذا كان هذا هو الرمز الموجود في ملفك View2Controller إذن السبب وراء مواجهتك للمشكلة هو أنك تقوم بتعيين المؤشر على العرض على صفر قبل أن يتمكن العرض من تخصيص نفسه بشكل صحيح.خلال مرحلة إلغاء التخصيص الخاصة به، سيتم تحرير العرض وإزالة عناصر منشئ الواجهة بشكل صحيح.حاول إزالة السطر أو التعليق عليه self.view = nil;.

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