के लिए मेमोरी जारी नहीं की जा रही है मेरे पास UIView
है जिसे ActivityDetailView
कहा जाता है जिसे मैं तत्काल करता हूं और फिर मूल दृश्य नियंत्रक के भीतर स्क्रॉलव्यू में जोड़ता हूं। जब यह कस्टम व्यू आवंटित किया जाता है, तो यह अतिरिक्त मेमोरी के हर बार लगभग 1 एमबी लेता है और इंस्ट्रूमेंट्स दिखा रहा है कि स्मृति को कभी भी जारी नहीं किया जा रहा है, भले ही दृश्य और अभिभावक दृश्य नियंत्रक प्रत्येक के पास dealloc
विधियों को बुलाया जा सके। मुझे स्मृति चेतावनियां मिल रही हैं और ऐप अंततः मारे जा रहा है इसलिए मैं कुछ गलत कर रहा हूं।MKMapView w/ARC
डब्ल्यू के बारे में मानचित्र दृश्य कारण किया जा रहा/जानकारी अपडेट किया गया है, लेकिन मैं एक फिक्स
जरूरत कस्टम ActivityDetailView
निब फ़ाइल के भीतर, वहाँ एक मानचित्र दृश्य है कि जूम और उन के स्थान के आसपास केंद्रित है है। जब मैंने इस मानचित्र दृश्य को निब से हटा दिया ताकि वह स्क्रीन पर नहीं खींचा जा सके, तो स्मृति आवंटन के मुद्दे दूर हो गए। हालांकि, मुझे स्पष्ट रूप से मानचित्र दृश्य की आवश्यकता है। मैप व्यू के दायरे से बाहर होने पर मानचित्र दृश्य का डेटा क्यों जारी नहीं किया जाएगा?
दृश्य दिखाते समय केवल 1 ActivityDetailView
और 1 ActivityDetailViewController
जीवित है। जैसे ही मैं ढेर से दृश्य को पॉप करता हूं, वे अब नहीं रह रहे हैं। यह समझ में नहीं आता है कि स्मृति कैसे बढ़ता रहता है भले ही वस्तुओं को उपकरण के माध्यम से दिखाया जा रहा हो। यदि माता-पिता के विचारों को हटा दिया जाता है, तो मानचित्र दृश्य डेटा को क्यों हटाया नहीं जा रहा है?
मैं क्या गलत कर रहा हूं या मुझे क्या जांचना चाहिए?
@interface ActivityDetailView()
{
CLLocation *location;
__weak id parentViewController;
int scrollViewX;
ImageUtility *imageUtility;
}
@end
@implementation ActivityDetailView
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSArray *xibViews = [[NSBundle mainBundle] loadNibNamed:@"ActivityDetailView" owner:nil options:nil];
if ([xibViews count] < 1) return nil;
ActivityDetailView * xibView = [xibViews objectAtIndex:0];
[xibView setFrame:frame];
self = xibView;
}
return self;
}
- (id)initWithLocation:(CLLocation *)loc parentController:(id)parent
{
self = [self initWithFrame:CGRectMake(0, 0, 320, 1000)];
if (self)
{
imageUtility = [ImageUtility sharedManager];
location = loc;
parentViewController = parent;
scrollViewX = 0;
[self centerMapForActivityLocation];
[self addPhotoButtonWithImageNamed:@"addActivityPhoto.png" target:parentViewController selector:@selector(addPhotoToActivity:)];
}
return self;
}
- (void)dealloc
{
NSLog(@"ActivityDetailView was dealloced");
}
जनक दृश्य नियंत्रक में:
यहाँ कस्टम दृश्य है
@interface ActivityDetailViewController()
{
ActivityDetailView *detailView;
}
@end
@implementation ActivityDetailViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Some code left out for clarity
[self setupView];
}
- (void)didReceiveMemoryWarning
{
NSLog(@"Purging image cache");
[[ImageUtility sharedManager] purgeCache];
}
- (void)dealloc
{
// These essentially do nothing to help the problem
detailView.mapView = nil;
[detailView removeFromSuperview];
detailView = nil;
self.scrollView = nil;
NSLog(@"ActivityDetailViewController was dealloced");
}
- (void)setupView
{
// Add the activity detail view to the scroll view
detailView = [[ActivityDetailView alloc] initWithLocation:self.activityLocation parentController:self];
[self.scrollView addSubview:detailView];
self.scrollView.contentSize = detailView.frame.size;
// Setup the map view
detailView.mapView.delegate = self;
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
annotation.coordinate = self.activityLocation.coordinate;
[detailView.mapView addAnnotation:annotation];
if (self.activity.mapImageName) {
detailView.mapView.scrollEnabled = YES;
detailView.mapView.zoomEnabled = YES;
} else {
detailView.mapView.scrollEnabled = NO;
detailView.mapView.zoomEnabled = NO;
}
// Add the weather area to the view
dayView = [[DailyButtonView alloc] initWithFrame:CGRectMake(0, -17, 60, 70)];
dayView.hidden = YES;
[detailView.weatherView addSubview:dayView];
}
यहाँ उपकरण से एक छवि दिखा रहा है कि स्मृति के बहुमत निब लोड होने से है
मेरे पास कोई नहीं है इस समय कैश करने के लिए जी। दृश्य मूल रूप से इसके अंदर एक नक्शादृश्य और कुछ लेबल और कुछ तालिका दृश्यों के साथ एक स्क्रॉलव्यू है। तालिका दृश्य किसी भी चीज़ के साथ पॉप्युलेट नहीं होते हैं और मैं स्क्रॉलव्यू के लिए पृष्ठभूमि छवि के अलावा किसी भी छवि को लोड नहीं कर रहा हूं, लेकिन जब दृश्य करता है तो इसे रिलीज़ किया जाना चाहिए।
सुनिश्चित नहीं है कि यह समस्या है (और यह नहीं होना चाहिए)। लेकिन कोड की ये दो पंक्तियां गलत विवरण हैं व्यू = शून्य; [विवरण देखें हटाएं FromSuperview]; आपको removeFromSuperView को कॉल करना चाहिए और उसके बाद इसे शून्य पर सेट करना चाहिए। – Cosmin
@Cosmin अच्छी तरह से मुझे लगता है कि इससे कोई फर्क नहीं पड़ता है, अगर यह अभी भी किसी अन्य दृश्य में जोड़ा गया है तो यह डेलोक नहीं होगा ... मुझे लगता है कि हमारा ओपी बस सामान की कोशिश कर रहा था, और इसे छोड़ दिया। –
@Cosmin As Grady ने कहा, मैं बस उस बिंदु पर कुछ भी कोशिश कर रहा था यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है, लेकिन ऐसा नहीं हुआ। – ZeNewb