Speicherverbrauch IOS-Anwendung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Speicherverbrauch IOS-Anwendung

    Sehr geehrte Forum-Mitglieder,

    Ich bin absoluter Xcode-Neuling und habe eine wichtige Frage. Ich habe aktuell ein IOS-Programm für das iPhone mit 2 Views. Man kann per Gesture zwischen den beiden Views hin und her springen. Die Views beinhalten nur reinen Text. Wenn ich das Programm starte (Simulator) und mir dann den Speicherverbrauch
    anschaue wird dieser immer mehr umso mehr ich zwischen den Views hin und her springe. Er baut sich auch nicht mehr ab. Mach ich irgendetwas falsch oder muss ich auf etwas Achten. ARC ist aktiviert!

    Mit freundlichen Grüssen
    D. Stachowiak
  • necromonger schrieb:

    Sehr geehrte Forum-Mitglieder,

    Ich bin absoluter Xcode-Neuling und habe eine wichtige Frage. Ich habe aktuell ein IOS-Programm für das iPhone mit 2 Views. Man kann per Gesture zwischen den beiden Views hin und her springen. Die Views beinhalten nur reinen Text. Wenn ich das Programm starte (Simulator) und mir dann den Speicherverbrauch
    anschaue wird dieser immer mehr umso mehr ich zwischen den Views hin und her springe. Er baut sich auch nicht mehr ab. Mach ich irgendetwas falsch oder muss ich auf etwas Achten. ARC ist aktiviert!

    Mit freundlichen Grüssen
    D. Stachowiak


    <kristallkugel>Gern gemachter Anfängerfehler ist es, für jeden Anzeigenwechsel eine neue Instanz eines Viewcontrollers zu erzeugen statt zwischen den vorhandenen Instanzen zu wechseln. Wie wechselst Du denn zwischen den beiden Views?
  • Hallo,

    erstmal Danke für so viele Antworten. Ich hoffe es handelt sich lediglich um einen Anfängerfehler. Ich habe eine Single-View Application angelegt und noch einen separaten View-Controller hinzugefügt. Ich springe zwischen den beiden Views per Swipe Gesture Recognizer.
    Diesen habe ich über das Storyboard erstellt. Und hier jetzt der Code:

    AppDelegate.h

    Quellcode

    1. #import <UIKit/UIKit.h>
    2. @interface AppDelegate : UIResponder <UIApplicationDelegate>
    3. @property (strong, nonatomic) UIWindow *window;
    4. @end


    AppDelegate.m

    Quellcode

    1. #import "AppDelegate.h"
    2. @implementation AppDelegate
    3. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    4. {
    5. // Override point for customization after application launch.
    6. [UIApplication sharedApplication].idleTimerDisabled = YES; // Bildschirmsperre verhindern!
    7. return YES;
    8. }
    9. - (void)applicationWillResignActive:(UIApplication *)application
    10. {
    11. // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    12. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    13. }
    14. - (void)applicationDidEnterBackground:(UIApplication *)application
    15. {
    16. // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    17. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    18. }
    19. - (void)applicationWillEnterForeground:(UIApplication *)application
    20. {
    21. // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    22. }
    23. - (void)applicationDidBecomeActive:(UIApplication *)application
    24. {
    25. // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    26. }
    27. - (void)applicationWillTerminate:(UIApplication *)application
    28. {
    29. // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    30. }
    31. @end
    Alles anzeigen


    ViewController.h (erster View)

    Quellcode

    1. #import <UIKit/UIKit.h>
    2. @interface ViewController : UIViewController
    3. @end


    ViewController.m (erster View)

    Quellcode

    1. #import "ViewController.h"
    2. @interface ViewController ()
    3. @end
    4. @implementation ViewController
    5. - (void)viewDidLoad
    6. {
    7. [super viewDidLoad];
    8. // Do any additional setup after loading the view, typically from a nib.
    9. }
    10. - (void)didReceiveMemoryWarning
    11. {
    12. [super didReceiveMemoryWarning];
    13. // Dispose of any resources that can be recreated.
    14. }
    15. @end
    Alles anzeigen


    Geschwindigkeit.h (zweiter ViewController)

    Quellcode

    1. #import <UIKit/UIKit.h>
    2. @interface Geschwindigkeit : UIViewController
    3. @end


    Geschwindigkeit.m (zweiter ViewController)

    Quellcode

    1. #import "Geschwindigkeit.h"
    2. @interface Geschwindigkeit ()
    3. @end
    4. @implementation Geschwindigkeit
    5. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    6. {
    7. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    8. if (self) {
    9. // Custom initialization
    10. }
    11. return self;
    12. }
    13. - (void)viewDidLoad
    14. {
    15. [super viewDidLoad];
    16. // Do any additional setup after loading the view.
    17. }
    18. - (void)didReceiveMemoryWarning
    19. {
    20. [super didReceiveMemoryWarning];
    21. // Dispose of any resources that can be recreated.
    22. }
    23. /*
    24. #pragma mark - Navigation
    25. // In a storyboard-based application, you will often want to do a little preparation before navigation
    26. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    27. {
    28. // Get the new view controller using [segue destinationViewController].
    29. // Pass the selected object to the new view controller.
    30. }
    31. */
    32. @end
    Alles anzeigen



    Vielleicht kann mir jemand meinen Fehler erklären!

    Mit freundlichen Grüssen und Danke vorab
    D. Stachowiak


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von necromonger ()

  • Testapplication

    Hallo,

    ich habe eine Testapplication gebaut und als ZIP hochgeladen. Wenn man jetzt im Simulator zwischen den Views hin & her wechselt baut sich der Speicherverbrauch immer mehr auf und baut sich nicht mehr ab.

    Mit freundlichen Grüssen
    D. Stachowiak
    Dateien
    • Testview.zip

      (73,95 kB, 296 mal heruntergeladen, zuletzt: )
  • Wenn ich das richtig sehe, hast die im Storyboard zwei segues, die jeweils den anderen ViewController modal aufrufen. Da Du beide ViewController so miteinander verbunden hast, passiert, was schon oben vermutet wurde: Bei jedem Swipe wird ein neues ViewController-Objekt aus dem Storyboard instantiert, dadurch wächst der Speicherbedarf auch an.

    Lösung:
    1.) Lösche den segue von ViewController2 zurück zu ViewController1 im Storyboard (nur den segue löschen, Dein GestureRecognizer im VC2 kann bleiben)
    2.) Dann erstelle eine einfache Methode im ViewController2, mit der er sich selbst verschinden lässt. Dadurch wird automatisch wieder der ursprüngliche ViewController1 sichtbar.

    Zum Beispiel so:

    Quellcode

    1. - (IBAction)swipeBack:(id)sender {
    2. [self dismissViewControllerAnimated:YES completion:nil];
    3. }


    3.) Diese Methode "verdrahtest" Du im Storyboard mit Deinem GestureRecognizer im VC2.

    Falls Du das nicht hinbekommst, sende ich Dir anbei Dein Projekt wieder zurück. Ich habe die vorgeschlagenen Änderungen durchgeführt. Der Speicherbedarf steigt nicht mehr an!

    Viel Glück.
    Dateien
    • Testview.zip

      (138,46 kB, 285 mal heruntergeladen, zuletzt: )
    Meine Signatur: Wir sehen die Welt nicht wie sie ist, sondern wie wir sind ! :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von LukeSideWalker ()

  • Danke für die schnelle und sehr hilfreiche Antwort. Jetzt habe ich noch eine Frage. Wenn ich von dem zweiten View-Controller in einen dritten View-Controller springen möchten funktioniert es nicht. Ich habe im zweiten View-Controller einen weitere Swipe-Gesture hinzugefügt und im Storyboard mit dem dritten View-Controller verbunden. Das wird auch dargestellt. Nur funktioniert es nicht. Muss ich durch das swipeback irgendetwas anders machen?

    Mit freundlichen Grüssen
    D. Stachowiak