سؤال

لأقتبس من وثيقة CGLayer:

<اقتباس فقرة>   

والكوارتز تخزين أي الكائنات التي يتم استخدامها، بما في ذلك كائنات CGLayer.

وأواجه مشاكل مع الذاكرة على صفحات كبيرة واسعى الى ان تنفيذ آلية بسيطة حيث يتم الافراج عن الآراء وصوغه على أساس ما إذا كانوا على / قبالة الشاشة.

ويقول في سبيل البساطة التي لدي مجموعة من UIImages، التي أنشئت نتيجة لطلب الشبكة، وحفظه في مجموعة في مكان ما. I إنشاء UIImageView مثل ذلك:

anImage = [anArray objectAtIndex:0];
UIImageView* imgView = [[UIImageView alloc] initWithImage:anImage];
[mainView addSubview:imgView]; // Quartz eats memory for view after first draw
[imgView release];             // owned by mainView now
[...]                          // wait a bit for draw cycle
[imgView removeFromSuperview]; // memory doesn't go down

وعندما يذهب للimgView أفسكرين هو removedFromSuperview وأفرج عنه. الحق على ما يرام؟ Nope- وCGLayer موجود في الكوارتز لم يتم إزالتها، لأن anImage لا يزال موجودا.

وكيف يمكنني الحصول على حول هذا؟ الطريقة الوحيدة في هذا السيناريو هو خلق صورة بالضبط نفس خلف الكوارتز مع عنوان مؤشر مختلفة وحذف الصورة القديمة. والطريقة الوحيدة للقيام بذلك هي ل"نسخة عميق" الصورة (UIImage لا تنفذ NSCoding) أو أن تطلب ذلك مرة أخرى عبر الشبكة (بطيئة).

وماذا أنا أفكر هو أنني بحاجة إلى sqllite صوري إلى قاعدة بيانات وrefetch لهم في كل مرة وجهة نظر يأتي onscreen- ولكن أحب أن تسمع أفكار الناس في هذا الشأن.

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

المحلول

وهنا يمكنك زيادة imgView 0-1.

UIImageView* imgView = [[UIImageView alloc] initWithImage:anImage];

في السطر التالي، وmainView incrementes عدد مرجع. (الآن حان 2)

[mainView addSubview:imgView]; // Quartz eats memory for view after first draw

وهنا، تقوم بتحرير imgView وعدد مرجع يعود الى واحد.

[imgView release]; // owned by mainView now

وأنا لا أعتقد أن مشاكل الذاكرة الخاصة بك لها أي علاقة مع أنيميج. طالما imgView هو subview، فإنه لن تحرير هذا الكائن، لأنه يحتاج هذا الكائن رسم على الشاشة.

وماذا يعني السطر التالي، هو أنه إذا كنت رسم برمجيا إلى CGLayer الخاص بك، كوارتز مع مخبأ ما كنت قد رسمت، بحيث كنت لا إعادة رسم باستمرار نفس الشيء. انها لا تتعلق حقا إلى إضافة subViews.

<اقتباس فقرة>   

والكوارتز تخزين أي الكائنات التي يتم استخدامها، بما في ذلك كائنات CGLayer.

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