我在将一系列char *对象添加到队列(CHCircularBufferQueue)时遇到麻烦。队列将一个对象作为输入(据我了解),因此我创建了一个从NSObject继承的简单对象,称为tokenObject,该对象仅包含char * tokenName。每次我向队列添加新的tokenObject时,我都会分配一个新的tokenObject,然后在下次我添加到Queue时将该新的tokenObject传递给Queue。但是,当我将tokenObject.tokenName设置为新的char *字符串时,它将覆盖队列中的所有tokenObjects,因此当我打印整个Queue时,会得到一系列相同的字符串,而不是唯一的字符串。我做错了什么?

这是在目标-c

以下是来自main.m和tokenObject.h的代码
main.m:

int main (int argc, const char * argv[])
{
    CHCircularBufferQueue *tokenQueue = [[CHCircularBufferQueue alloc] init];
    tokenObject *myTokenObject = [[tokenObject alloc] init];


TK currentToken;
initScanner();
scanToken();
[myTokenObject setTokenName:getToken() ];
currentToken = getTkrep();

int x=0;

while (x<5/*currentToken != TK_EOF*/) {


        //printf("line number: %d, token value: %d, token string: %s\n", getLinenumber(), getTkrep(), getToken()); /* replace line with "add to queue" */
    scanToken();
    myTokenObject.tokenName = getToken();
    [tokenQueue addObject:myTokenObject];
    myTokenObject = [[tokenObject alloc] init];
    currentToken = getTkrep();


    x = x+1;
}

while(x != 1){
    printf("%s", [[tokenQueue firstObject] tokenName]);
    [tokenQueue removeFirstObject];
    x = x-1;

    printf("%i", x);
}
return 0;


}

tokenObject.h:

@interface tokenObject : NSObject{

    char *tokenName;
}
@property (assign) char* tokenName;


@结束

最佳答案

您的样本在某些方面违反了可可最佳做法。一方面,通常在应用程序的委托中而不是在main.m中启动功能。

但是,在回答您的问题时,请尝试使用NSString *而不是char *。您的自定义TokenObject是否除了拥有字符串外还执行其他操作?如果是这样,请避免完全继承子类,而直接直接分配/分配NSString,然后将其添加到队列中。您应该找到更符合您期望的结果。

关于objective-c - 每次将对象添加到队列或堆栈时,是否都需要创建一个对象的新实例? objective-c ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9041213/

10-09 06:30