Hallo zusammen,
ich habe mal wieder ein Verständnisproblem. In einem Tableview stelle ich Texte und Bilder dar, die ich aus einer SQLDatenbank übernehme.
Das klappt auch wunderbar. Ab ca. 5.300 Datensätzen wird das Ram auf meinem iPod knapp und die APP stürzt ab.
Mit Instruments kann ich den ansteigenden Speicherverbrauch beobachten bei ca. 185 Mb ist dann Schluss.
Der Absturz ist ja erklärlich, für mich stellen sich trotzdem ein paar Fragen:
- Hätte nicht vorher die Funktion - (void)didReceiveMemoryWarning aufgerufen werden müssen?
- Warum erscheint keinerlei Fehlermeldung wie - out of memory - im Log?
- Warum bleibt der Debugger nicht stehen?
- Wie kann ich den freien Speicher abfragen um bereits vorher auf dem Speichermangel zu reagieren (z. B. Darstellung ohne Bild)?
- Hat das iPhone 4 mehr Ram wie ein iPod (Kaufdatum 2011)? Das iPhone stürzt nicht ab und zeigt die ca. 6.000 Datensätze korrekt an.
In der Console habe ich folgende Meldung:
Alles anzeigen
Den Eintrag aus dem Devicelog spare ich mir hier, sonst ist der Text zu lang.
Am liebsten würde ich bei der Initialisierung den freien Speicher abfragen und hochrechen, ob der Speicher reicht. Dann ggf. Darstellung ohne Bilder.
Zweite Möglichkeit - die Funktion - (void)didReceiveMemoryWarning wird aufgerufen. Alles wieder freigegeben und dann neu auch Darstellung ohne Bilder.
Nur das die App ohne irgendeinen Hinweis abstürzt ist nicht akzeptabel.
Als Übergangslösung werde ich die Bilder höher komprimieren. Nur löst das mein grundsätzliches Problem nicht. Denn spätestens bei 10.000 Datensätzen
habe ich wieder kein Ram.
Ich hoffe jemand hat einen Tipp für mich.
Gruß Berthold
ich habe mal wieder ein Verständnisproblem. In einem Tableview stelle ich Texte und Bilder dar, die ich aus einer SQLDatenbank übernehme.
Das klappt auch wunderbar. Ab ca. 5.300 Datensätzen wird das Ram auf meinem iPod knapp und die APP stürzt ab.
Mit Instruments kann ich den ansteigenden Speicherverbrauch beobachten bei ca. 185 Mb ist dann Schluss.
Der Absturz ist ja erklärlich, für mich stellen sich trotzdem ein paar Fragen:
- Hätte nicht vorher die Funktion - (void)didReceiveMemoryWarning aufgerufen werden müssen?
- Warum erscheint keinerlei Fehlermeldung wie - out of memory - im Log?
- Warum bleibt der Debugger nicht stehen?
- Wie kann ich den freien Speicher abfragen um bereits vorher auf dem Speichermangel zu reagieren (z. B. Darstellung ohne Bild)?
- Hat das iPhone 4 mehr Ram wie ein iPod (Kaufdatum 2011)? Das iPhone stürzt nicht ab und zeigt die ca. 6.000 Datensätze korrekt an.
In der Console habe ich folgende Meldung:
Quellcode
- Nov 17 08:27:45 unknown MobileITInventory[639] <Warning>: Item 5342 hinzugefuegt.
- Nov 17 08:27:46 unknown MobileITInventory[639] <Warning>: Item 5343 hinzugefuegt.
- Nov 17 08:27:46 unknown MobileITInventory[639] <Warning>: Item 5344 hinzugefuegt.
- Nov 17 08:27:46 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:de.reiff.mobileITinventory[0xe809]) Bug: launchd_core_logic.c:3795 (24506):0
- Nov 17 08:27:46 unknown configd[25] <Notice>: jetsam: kernel termination snapshot being created
- Nov 17 08:27:46 unknown com.apple.debugserver-50[638] <Warning>: 1 [027e/1503]: error: ::read ( 4, 0x2ff7c9f0, 1024 ) => -1 err = Bad file descriptor (0x00000009)
- Nov 17 08:27:46 unknown lockdownd[17] <Error>: 011ad000 handle_connection: Could not receive USB message #41 from iTunes. Killing connection
- Nov 17 08:27:46 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:de.reiff.mobileITinventory[0xe809]) Bug: launchd_core_logic.c:3794 (24506):3
- Nov 17 08:27:46 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:de.reiff.mobileITinventory[0xe809]) Bug: launchd_core_logic.c:3202 (24506):10
- Nov 17 08:27:46 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:de.reiff.mobileITinventory[0xe809]) Working around 5020256. Assuming the job crashed.
- Nov 17 08:27:46 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:de.reiff.mobileITinventory[0xe809]) Job appears to have crashed: Segmentation fault: 11
- Nov 17 08:27:46 unknown com.apple.mobile.lockdown[17] <Notice>: Could not receive size of message
- Nov 17 08:27:46 unknown SpringBoard[27] <Warning>: Application 'MobileITInventory' exited abnormally with signal 11: Segmentation fault: 11
- Nov 17 08:27:47 unknown com.apple.mobile.lockdown[17] <Notice>: Could not receive size of message
- Nov 17 08:27:47 unknown lockdownd[17] <Error>: 011ad000 handle_connection: Could not receive USB message #6 from AppleMobileDeviceHelper. Killing connection
- Nov 17 08:27:47 unknown ReportCrash[693] <Error>: libMobileGestalt loadBasebandMobileEquipmentInfo: CommCenter error: 1:45
- Nov 17 08:27:47 unknown ReportCrash[693] <Error>: libMobileGestalt copyInternationalMobileEquipmentIdentity: Could not get mobile equipment info dictionary
- Nov 17 08:27:47 unknown ReportCrash[693] <Error>: Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2011-11-17-082747.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0
- Nov 17 08:27:47 unknown lockdownd[17] <Error>: 011ad000 handle_connection: Could not receive USB message #5 from AppleMobileDeviceHelper. Killing connection
- Nov 17 08:27:47 unknown com.apple.mobile.lockdown[17] <Notice>: Could not receive size of message
- Nov 17 08:27:48 unknown lockdownd[17] <Error>: 011ad000 handle_connection: Could not receive USB message #5 from AppleMobileDeviceHelper. Killing connection
- Nov 17 08:27:48 unknown com.apple.mobile.lockdown[17] <Notice>: Could not receive size of message
- Nov 17 08:27:48 unknown lockdownd[17] <Error>: 00190000 handle_connection: Could not receive USB message #7 from iTunes. Killing connection
- Nov 17 08:27:48 unknown com.apple.mobile.lockdown[17] <Notice>: Could not receive size of message
- Nov 17 08:27:49 unknown lockdownd[17] <Error>: 00190000 handle_connection: Could not receive USB message #15 from iTunes. Killing connection
- Nov 17 08:27:49 unknown com.apple.mobile.lockdown[17] <Notice>: Could not receive size of message
- Nov 17 08:27:51 unknown lockdownd[17] <Error>: 00190000 handle_connection: Could not receive USB message #7 from mobile_fs_util. Killing connection
Den Eintrag aus dem Devicelog spare ich mir hier, sonst ist der Text zu lang.
Am liebsten würde ich bei der Initialisierung den freien Speicher abfragen und hochrechen, ob der Speicher reicht. Dann ggf. Darstellung ohne Bilder.
Zweite Möglichkeit - die Funktion - (void)didReceiveMemoryWarning wird aufgerufen. Alles wieder freigegeben und dann neu auch Darstellung ohne Bilder.
Nur das die App ohne irgendeinen Hinweis abstürzt ist nicht akzeptabel.
Als Übergangslösung werde ich die Bilder höher komprimieren. Nur löst das mein grundsätzliches Problem nicht. Denn spätestens bei 10.000 Datensätzen
habe ich wieder kein Ram.
Ich hoffe jemand hat einen Tipp für mich.
Gruß Berthold