M
Maximilian2010
Mitglied
Thread Starter
- Dabei seit
- 07.09.2010
- Beiträge
- 38
- Reaktionspunkte
- 0
Hey zusammen,
ich habe ein Problem bei dem Speichermanagement und weiß nicht so genau wie ich das lösen kann...
Ich habe folgende Klassen:
objekt.h
objekt.m
In meiner Main erzeuge ich dann ein Objekt der obigen Klasse:
Wenn ich jetzt im Programmablauf auf die Unterarrays von my_sample_data zugreifen möchte, erhalte ich logischerweise einen EXC_BAD_ACCESS... wenn ich jetzt die autorelease rausstreiche sollte es ja eigentlich funktionieren oder? Aber wie gebe ich die dann am besten wieder frei? Muss ich dann in der dealloc mein my_sample_data in einer Schleife durchlaufen und alle releasen?
Vielen Dank
Edit: die NSStrings müsste ich dan auch retainen, ne?
ich habe ein Problem bei dem Speichermanagement und weiß nicht so genau wie ich das lösen kann...
Ich habe folgende Klassen:
objekt.h
Code:
struct sample_data{
NSInteger id;
NSString* name;
NSMutableArray* list;
};
struct sample_data_list{
NSInteger list_id;
NSString* list_name;
NSInteger list_has_details;
NSMutableArray* list_details;
};
-(void) read_sample_data : (NSMutableArray*) data;
objekt.m
Code:
-(void) read_sample_data : (NSMutableArray*) data{
struct sample_data data_temp;
struct sample_data_list data_list_temp;
[data removeAllObjects];
//Struct aus Datenbank füllen
const char* sql = "SELECT sample_id, name FROM sample_data";
sqlite3_stmt *select;
int resp = sqlite3_prepare(db_data, sql, -1, &select, NULL);
if( resp == SQLITE_OK ){
while(sqlite3_step(select) == SQLITE_ROW){
data_temp.id = sqlite3_column_int(select, 0);
data_temp.name = [NSString stringWithUTF8String:(char*)sqlite3_column_text(select, 1)];
data_temp.list = [[[NSMutableArray alloc] init] autorelease];
//zweite Datenbankabfrage
if( resp_1 == SQLITE_OK ){
while(sqlite3_step(select_1) == SQLITE_ROW){
...
[data_temp.list addObject: [NSValue value:&data_list_temp withObjCType:@encode(struct sample_data_list)]];
}
}
[data addObject: [NSValue value:&data_temp withObjCType:@encode(struct sample_data)]];
}
}
}
In meiner Main erzeuge ich dann ein Objekt der obigen Klasse:
Code:
my_data = [objekt new];
my_sample_data = [[NSMutableArray alloc]init]; //globale Variable & release in der dealloc
[my_data read_sample_data : my_sample_data];
Wenn ich jetzt im Programmablauf auf die Unterarrays von my_sample_data zugreifen möchte, erhalte ich logischerweise einen EXC_BAD_ACCESS... wenn ich jetzt die autorelease rausstreiche sollte es ja eigentlich funktionieren oder? Aber wie gebe ich die dann am besten wieder frei? Muss ich dann in der dealloc mein my_sample_data in einer Schleife durchlaufen und alle releasen?
Vielen Dank
Edit: die NSStrings müsste ich dan auch retainen, ne?
Zuletzt bearbeitet: