Groesse von arrays

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

  • Groesse von arrays

    Hallo,

    flogendes Problem. Lese per initWithContentOfFile textpassagen in form von plists in 3 arrays ein. Nun kommt es recht schnell zu Fehlern, wenn die dateien zu gross sind. (So gross sind die dateien aber eigentlich noch garnicht. insgesammt nicht mehr als 2000 Zeichen.) Wie gross darf ein Array sein, oder gibt es eine andere Mˆglichkeit der Speicherverwaltung.

    Hier nochmal der Quelltext:

    - (NSMutableString *)getEditorial {
    int x,y;
    float a,b;
    NSMutableString * editorial = [[NSMutableString alloc] init];

    NSMutableArray * start = [[NSMutableArray alloc] init];
    NSMutableArray * mitte = [[NSMutableArray alloc] init];
    NSMutableArray * ende = [[NSMutableArray alloc] init];



    [start initWithContentsOfFile:@"start.plist"];
    [mitte initWithContentsOfFile:@"mitte.plist"];
    [ende initWithContentsOfFile:@"ende.plist"];



    a = rand();
    b = RAND_MAX;
    y = round((a/b)*([start count]-1));
    [editorial appendString:[start objectAtIndex:y]];
    //printf("%s",[[start objectAtIndex:y] UTF8String]);

    a = rand();
    b = RAND_MAX;
    y = round((a/b)*([mitte count]-1));
    [editorial appendString:[mitte objectAtIndex:y]];
    //printf("%s",[[mitte objectAtIndex:y] UTF8String]);

    a = rand();
    b = RAND_MAX;
    y = round((a/b)*([ende count]-1));
    [editorial appendString:[ende objectAtIndex:y]];
    //printf("%s\n\n",[[ratte objectAtIndex:y] UTF8String]);




    [start release];
    [mitte release];
    [ende release];
    return editorial;
    [editorial release];
    }
    Warum ist hier alles viel besser als wo?
  • Groesse von Arrays

    Was mir auff‰llt ist, dass Du Deine Arrays zweimal initialisierst:

    [[NSMutableArray alloc] init]; und dann nochmal mit
    [... initWithContentsOfFile:...];

    Warum machst Du nicht gleich:

    [[NSMutableArray alloc] initWithContentsOfFile:...];

    Ansonsten, was f¸r Fehler passieren denn? St¸rzt das Programm ab? Kommen nicht die erwarteten Daten zur¸ck? Gibt es irgendwelche Fehlermeldungen?

    Michael
  • Original von flatline
    Was ist flasch daran ein Object zweimal zu initialisieren?


    Eine exakte Begr¸ndung kann ich da jetzt auch nicht liefern, aber das Initialisieren einen Objektes in Cocoa bedeutet nicht nur dem Objekt einen Wert zu zuweisen, sondern die Objekte initialisieren ihre internen Strukturen. Kˆnnte mir vorstellen, dass beim NSArray durch die doppelte Initialisierung irgendwas im Array intern verbogen wird, was dann Probleme macht.

    Michael
  • Original von Michael
    Original von flatline
    Was ist flasch daran ein Object zweimal zu initialisieren?


    Eine exakte Begr¸ndung kann ich da jetzt auch nicht liefern...


    Etwas in Cocoa/Objective-C zweimal zu initialisieren ist ein grober Fehler. Gerade weil wir in ja Reference-Counting haben zum Speichermanagement, und keine Garbage Collection. Wenn jetzt z.B. in der init-Methode irgendwelche Objekte erzeugt werden, dann kommt man in teufels K¸che, wenn man die zweimal aufruft. Im besten Fall hast du ein Memory-Leak, im schlimmsten st¸rzt dein Programm gleich mal mit nem SIGBUS oder so ab.

    Dom
  • Der R¸ckgabewert den init liefert ist normalerweise self, als Zeiger auf das initialiserte Objekt. Wenn Du diesem wieder eine initWithContentsOfFile: message schickst, kriegst Du wiede einen Zeiger auf ein Objekt geliefert. Was hinter der B¸hne passiert, weisst Du nicht genau. Angelegt wird ein Objekt mit alloc. Dieses setzt auch den retain count auf 1.