オブジェクトが過剰にリリースされたためにアプリがクラッシュし、カスタムクラスでのdeallocの初期呼び出しに絞り込みました。これにより、以下にリストされているカスタムクラスを使用しているNSMutableArrayに起因するクラッシュが発生します。
#import <Foundation/Foundation.h>
@interface GraphData : NSObject{
    NSInteger key;
    NSString *value;
}
@property (nonatomic, readwrite) NSInteger key;
@property (nonatomic, retain) NSString *value;
-(id)initWithPrimaryKey:(NSInteger) xid;
-(id)initWithName:(NSString *)n key:(NSInteger)i;
@end
#import "GraphData.h"
@implementation GraphData
@synthesize  key,value;
-(id)initWithPrimaryKey:(NSInteger) xid{
    //[super init];
    self=[super init];
    if (self){
    self.key = xid;
    self.value = @"";
    }
    return self;
}
-(id)initWithName:(NSString *)n key:(NSInteger)i{
    self=[super init];
    if (self){
    self.key = 0;
    self.value = n;
    }
    return self;
}
-(void)dealloc{
    NSLog(@"Say bye to %@, kids!", self);
    [value release], value = nil;
    [super dealloc];
}
@end
奇妙なことに、私は別のクラスでGraphDataを使用していますが、問題なく動作します。ただし、この場合、deallocは、NSMutableArraytheNewDataプロパティを合成する直前に呼び出します。しかし、私がそれを3回合成した後。
-(NSMutableArray*)fillDataInArray:(NSInteger)keyphrase_id{
    NSLog(@"lsd");
    NSLog(@"Keyphrase_id:%d", keyphrase_id);
    NSDate *startdate = [self getDateForApplicationInstalled];
    NSDate *enddate = [NSDate date];
    NSString *dateString1=[[NSString alloc] initWithString: [fmt stringFromDate:startdate]];
    NSString *dateString2=[[NSString alloc] initWithString: [fmt stringFromDate:enddate]];
    NSMutableArray *newDataNew = [[NSMutableArray alloc]init];
    self.theNewData = newDataNew;
    [newDataNew release];
    selStmt = nil;
    // build select statement
    if (!selStmt)
    {
        const char *sql = "select distinct position, key_time from ranking where keyphrase_id = ? and key_time between ? and ? order by key_time";
        if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
        {
            selStmt = nil;
        }
        NSInteger n = keyphrase_id;
        sqlite3_bind_int(selStmt, 1, n);
        sqlite3_bind_text(selStmt, 2, [dateString1 UTF8String] , -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(selStmt, 3, [dateString2 UTF8String] , -1, SQLITE_TRANSIENT);
        NSLog(@"SQL query is: [%s]", sql);
    }
    if (!selStmt)
    {
        NSAssert1(0, @"Can't build SQL to read keyphrases [%s]", sqlite3_errmsg(database));
    }
    int ret;
    while ((ret=sqlite3_step(selStmt))==SQLITE_ROW) 
    { 
        GraphData *item = [[GraphData alloc]init];
        item.key = sqlite3_column_int(selStmt, 0);
        item.value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selStmt,1)];
        [self.theNewData addObject:item]; 
        [item release];
    }
    sqlite3_reset(selStmt); // reset (unbind) statement
    [dateString2 release];
    [dateString1 release];
    return theNewData;
}
また、別の方法でアクセスします。
-(NSMutableArray *) getDataForCharts:(int)seriesIndex{
    NSLog(@"speed");
    NSDate *startdate = [self getDateForApplicationInstalled];
    NSDate *enddate = [NSDate date];
    NSString *dateString1=[[NSString alloc] initWithString: [fmt stringFromDate:startdate]];
    NSString *dateString2=[[NSString alloc] initWithString: [fmt stringFromDate:enddate]];
    NSMutableArray *newDataNew = [[NSMutableArray alloc]init];
    self.actionNoteData = newDataNew;
    [newDataNew release];
    selStmt = nil;
    // build select statement
    if (!selStmt)
    {
        const char *sql = "";
        if (seriesIndex == 4) sql = "select distinct 105 score, notes_date from notes where iscompleted =1 and domain_id = ? and notes_date between ? and ? order by notes_date";
        if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
        {
            selStmt = nil;
        }
        NSInteger n = domain_id;
        sqlite3_bind_int(selStmt, 1, n);
        sqlite3_bind_text(selStmt, 2, [dateString1 UTF8String] , -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(selStmt, 3, [dateString2 UTF8String] , -1, SQLITE_TRANSIENT);
        NSLog(@"SQL query is: [%s]", sql);
    }
    if (!selStmt)
    {
        NSAssert1(0, @"Can't build SQL to read keyphrases [%s]", sqlite3_errmsg(database));
    }
    // loop reading items from list
    int ret;
    while ((ret=sqlite3_step(selStmt))==SQLITE_ROW) 
    { 
        GraphData *item = [[GraphData alloc]init]; // create item
        item.key = sqlite3_column_int(selStmt, 0);
        item.value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selStmt,1)];
        NSLog(@"Key:%d", sqlite3_column_int(selStmt, 0));
        NSLog(@"Value:%s", sqlite3_column_text(selStmt,1));
        [self.actionNoteData addObject:item]; // add to list
        [item release]; // free item
    }
    sqlite3_reset(selStmt); // reset (unbind) statement
    [dateString2 release];
    [dateString1 release];
    return actionNoteData;
}
ゾンビは[iリリース]を指しています。しかし、これは以前に呼び出された正確なステートメントであり、クラッシュにはなりません。
if (index == 4) {
        dateComponents.day = ([dateComponents day] -1 ) + dataindex + 1;
        if (dataForPlotActionNote.count > dataindex) {
            if ([dataForPlotActionNote objectAtIndex:dataindex]) {
                GraphData *i = (GraphData *) [dataForPlotActionNote objectAtIndex:dataindex];
                NSDate *date = [[[NSDate alloc] init] autorelease]; 
                date =[fmt dateFromString:i.value];
                datapoint.xValue = date;//[cal dateFromComponents:dateComponents];
                datapoint.yValue = [NSNumber numberWithDouble:(i.key)];
                [i release];
            }
        }
    }
実行中のコードの途中でdealloc呼び出しが発生する原因は何ですか?
GraphDataプロパティを作成し、毎回リセットすることで、十分に長く存続させることができますか?