Δουλεύω σε ένα παιχνίδι iPhone που χρησιμοποιεί ένα MKMapView ως το γήπεδο. Μετά από μόλις δύο λεπτά του παιχνιδιού η εφαρμογή αρχίζει αναπόφευκτα να πάρει υποτονική και τελικά συντρίβεται λόγω χαμηλής μνήμης. Μετά το σκάψιμο γύρω από τη ένοχος φαίνεται να είναι ότι η προβολή χάρτη απαιτεί συνεχώς περισσότερη μνήμη. Το παιχνίδι απαιτεί πολλή Ζουμ και μετατόπιση του χάρτη έτσι μπορώ μόνο να υποθέσουμε ότι η μνήμη cache του χάρτη των πλακιδίων απλά συνεχίζει να αυξάνεται μέχρι να εξαντληθεί η μνήμη. Υπάρχει κάποιος τρόπος για να αναγκάσει την προβολή χάρτη για να ξεπλύνει είναι προσωρινή μνήμη των πλακιδίων ή περιέχουν είναι η κατανάλωση μνήμης;
μνήμη cache Clear MKMapView της κεραμίδια;
* ΣΗΜΕΙΩΣΗ: Αυτή η απάντηση είναι σχετικό μόνο με iOS 4.1 και κάτω. Τα προβλήματα που περιγράφονται σε αυτή την απάντηση ως επί το πλείστον καθορίζεται στο iOS 4.2 *
Έχω κάνει κάποια σκάψιμο σε αυτό το app μου χρησιμοποιεί τόσο το χάρτη και επίσης έχει άλλα χαρακτηριστικά που απαιτούν υψηλή μνήμη RAM.
Δεν έχω βρει μια απάντηση, αλλά μια λύση. απαιτήσεις μνήμης MKMapView του κλιμακωθεί με γεωμετρική πρόοδο, όπως κάνετε ζουμ πιο κοντά σε μια περιοχή, και να κινηθείτε γύρω από μέσα η μεγέθυνση στην περιοχή.
Υπάρχουν δύο επίπεδα MKMapView μνήμη cache κεραμιδιών. Ένα εκδηλώνεται ως Malloc ~ 196kb σε Instruments, η άλλη είναι NSData (κατάστημα) διαφόρων μεγεθών.
Η Malloc φαίνεται να είναι οι ενεργές κεραμίδια στη χρήση, και υπάρχει ένα σκληρό όριο για το πόσα μπορεί να διατεθεί. Σε εφαρμογή μου ότι ο αριθμός είναι 16, δεν είναι σίγουρος αν με βάση τους στο μέγεθος UIView ή όχι. Αυτές οι κατανομές φαίνεται να είναι αυστηρά διαχείριση, και ανταποκρίνεται στις προειδοποιήσεις της μνήμης.
Τέλος πάντων, σε ένα ορισμένο επίπεδο ζουμ, ας πούμε, το επίπεδο της ηπείρου (αρκετό για να χωρέσει το μεγαλύτερο μέρος της Βόρειας Αμερικής σε μια οθόνη iPad), δεδομένου του μεγέθους των πλακιδίων, αν δεν έχει πραγματικά να φτάσουμε σε αυτό το δεύτερο επίπεδο της προσωρινής αποθήκευσης (NSData (Κατάστημα) ) για να ολοκληρώσει το χάρτη. Τα πάντα είναι τραγανή και καθαρή. Αν έχω φορτώσει σε έναν τόνο των εξωτερικών εικόνων σε ενεργό μνήμη, τα κεραμίδια ίδιοι κλαδέψετε. Φοβερός!
Το πρόβλημα έρχεται όταν χτυπά αυτό το δεύτερο επίπεδο της προσωρινής αποθήκευσης. Αυτό συμβαίνει όταν μεγέθυνση, και ξαφνικά αντί για 16 κεραμίδια για να δείξει ολόκληρη την planat, χρειάζεται 16 πλακίδια μόνο για να αναδείξουν Los Angelas, και όπως μπορείτε να μετακινηθείτε και όχι απλά ντάμπινγκ τα παλιά κεραμίδια που τους βάζει στο NSData (κατάστημα ) κατανομές όπου φαίνεται ποτέ να απελευθερωθεί.
Αυτό NSData (κατάστημα) είναι η NSURLConnectionCache που υπάρχει από προεπιλογή μόνο στη μνήμη. Δεν μπορείτε να αποκτήσετε πρόσβαση σε αυτό μνήμη cache για να το περιορίσει, γιατί δεν είναι η προεπιλεγμένη κοινόχρηστη μνήμη cache (ήδη δοκιμάσει).
Έτσι, αυτό είναι όπου έχω κολλήσει.
Η μη ικανοποιητική απάντηση είναι ότι αν απενεργοποιήσετε χάρτη ζουμ και να το διορθώσουμε σε λογικά ευρύ επίπεδο ζουμ, μπορείτε να αποφύγετε αυτό το πρόβλημα εντελώς, αλλά προφανώς κάποιες εφαρμογές πρέπει αυτό ... και αυτό είναι όσο το πήρα.
I κατατεθεί ένα εισιτήριο υποστήριξης με την Apple για να δουν αν μπορούν να αποκαλύψουν κανένα τρόπο να περιορίσουν αυτό το γελοίο μνήμη cache για τον χάρτη (που από τον τρόπο που ήταν σε θέση να ανέμελα ξεκινήσουμε με 50+ megs της μνήμης RAM που διατίθενται στην ενεργή μνήμη).
Η ελπίδα αυτό βοηθά.
επεξεργασία
Η επόμενη έκδοση iOS φαίνεται να έχουν λύσει αυτό το πρόβλημα απεριόριστη μνήμη cache. MKMapView τώρα κλαδεύει επιθετικά δεδομένα προσωρινής αποθήκευσης κεραμίδι του. ΧΑΙΡΟΜΑΙ!
Είσαι ρύθμιση του αναγνωριστικού επαναχρησιμοποίηση τις απόψεις σχολιασμό σας; (Αυτό σημαίνει ότι το σύστημα μπορεί να αποκολληθεί αυτές τις απόψεις και διατηρούν μόνο ένα μικρό αριθμό των απόψεων στη μνήμη ταυτόχρονα. Επίσης, αυξάνει την απόδοση κύλισης, γιατί κύλιση θα επαναχρησιμοποιήσουν τα μονοκατοικία θέα.)
Χρησιμοποιήστε αυτήν τη μέθοδο για να πάρετε μια άποψη σχολιασμό για να επαναχρησιμοποιηθούν:
- (MKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier
Εάν δημιουργήσετε μια εφαρμογή μόνο με το mapkit και μέγεθος θέα 768x1024 (μέγεθος ipad), η εφαρμογή μπορεί εύκολα να καταναλώνουν πάνω από 30 + ΜΒ το «Live Bytes», όπως αναφέρεται από το πρόγραμμα Όργανα χορηγήσεις. Αυτό παρατηρήθηκε τρέχει στο v3.2.2 iPad iOS (η τελευταία έκδοση μέχρι την επόμενη εβδομάδες υποτίθεται 4.2 απελευθέρωσης). Από την έρευνά μου φαίνεται ότι το ποσό της μνήμης είναι πολλά για ένα και μόνο app, όπου οι περισσότεροι προγραμματιστές αναφέρουν λαμβάνουν ένα επίπεδο 1 μνήμη προειδοποιεί γύρω από 15-25 MB και κολλάει αμέσως μετά από αυτό το επίπεδο.













