1

私はを持っており、char *それを処理してstrtok、で取得したすべての行のコピーを取得しstrdupます。これは、のインスタンスを保持char *するにポインタを格納する関数のパラメータとして使用されます。問題は、deallocでrelease onを呼び出すと、メッセージメッセージがdeallocatedインスタンスに送信されることです。だから私はここで何かがひどく間違っていると思います...ここにいくつかのコードがあります:NSMutableArrayNSPointerArrayNSMutableDictionary

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をステップスルーしたときにのみこのメッセージが表示されます。何も起こらなかった場合は、このメッセージが表示されます(ただし、クラッシュは発生しませんでした)。

4

1 に答える 1

0

Appleフォーラムでこれを聞いた:「デバッガーでコードをステップスルーしたときにのみそのメッセージが表示される場合、これはデバッガーの既知の問題です。コードをステップスルーして説明を取得すると、デバッガーはオブジェクトにメッセージを送信します。オブジェクトは割り当て解除されますが、スコープ内にあるため、デバッガーは割り当て解除されたオブジェクトにメッセージを送信し、割り当て解除されたインスタンスのメッセージングに関するコンソール出力を生成します。」ですから、デバッガーに問題があることを願っています。

于 2013-03-18T07:31:28.053 に答える