私はを持っており、char *
それを処理してstrtok
、で取得したすべての行のコピーを取得しstrdup
ます。これは、のインスタンスを保持char *
するにポインタを格納する関数のパラメータとして使用されます。問題は、deallocでrelease onを呼び出すと、メッセージメッセージがdeallocatedインスタンスに送信されることです。だから私はここで何かがひどく間違っていると思います...ここにいくつかのコードがあります:NSMutableArray
NSPointerArray
NSMutableDictionary
proceedDataBlock = ^(const char *data){
NSDate *date = [NSDate date];
int counter = 0;
char *temp = strdup(data);
char *cline = strtok(temp, "\n");
Table *dataList = [[Table alloc] initWithType:m.Type groups:groupings];
while(cline)
{
// do something
[myObject addString:strdup(cline)];
cline = strtok(NULL, "\n");
}
free(temp);
[callbackObj performSelectorOnMainThread:@selector(recieveDataModelsFinished:)
withObject:[dataList autorelease] waitUntilDone:YES]; }
myObject:addString
見た目は次のとおりです。
-(void)addString:(char *)line
{
// models is an NSMutableArray
char cGroup = line[32];
NSString *group = [NSString stringWithFormat:@"%c", cGroup];
NSPointerArray *dataArray = [self.models objectForKey:group];
[dataArray addPointer:line];
}
オブジェクトを解放すると、deallocが呼び出されます。
-(void)dealloc
{
[_models release];
[_type release];
[super dealloc];
}
_models
辞書の
すべてのエントリに対してメッセージが表示されますmessage send to deallocated instance
。
編集:ここで私はモデル辞書とその内容を作成します:
self.models = [NSMutableDictionary dictionaryWithCapacity:100];
if (mappings.count > 0)
{
self.groupings = [mappings retain];
for (GroupingInfo *group in self.groupings)
{
NSPointerArray *dataArray = [[NSPointerArray alloc] initWithOptions:NSPointerFunctionsCStringPersonality];
[self.models setValue:dataArray forKey:group.key];
[dataArray release];
}
}
else
{
NSPointerArray *dataArray = [[NSPointerArray alloc] initWithOptions:NSPointerFunctionsCStringPersonality];
[self.models setValue:dataArray forKey:ALLITEMS_GROUP_KEY];
[dataArray release];
}
}
EDIT2:デバッガーでdeallocをステップスルーしたときにのみこのメッセージが表示されます。何も起こらなかった場合は、このメッセージが表示されます(ただし、クラッシュは発生しませんでした)。