我在将一系列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/