如何显示此for循环的每次迭代?目标C.

时间:2011-04-10 18:22:20

标签: objective-c arrays loops for-loop

我还在学习Objective C的基本语法,所以这个答案可能很明显。我在这里要做的是让display.text等于列表中“newtext”的所有实例(每次“i”更改)。

    NSArray *newsArray = [NSArray arrayWithObjects: @"news", @"latest", @"trending", @"latebreaking", nil];
        for(int i=0; i<4; ++i)
        {
            NSString *newText = [NSString stringWithFormat:@"%@%@\n", [newsArray objectAtIndex: i],[sufField text]];
            display.text = newText;
        }

谢谢!

1 个答案:

答案 0 :(得分:1)

答案取决于display.text是什么。如果是 immutable 字符串:

•读/写对象属性(例如property (readwrite, assign) NSString *text;);或

•结构的字段(例如struct { NSString *text; ... }

那么您需要做的就是通过附加newText来创建字符串:

display.text = [display.text stringByAppendingString:newText];

如果您正在使用自动垃圾收集,那么您就完成了。

如果不是,您需要知道display.text的所有权。假设display.text拥有其值(通常情况)并且属性或结构字段定义如上,则代码变为:

NSString *oldText = display.text;
display.text = [[oldText stringByAppendingString:newText] retain]; // create new string and retain
[oldText release]; // release previous value

现在,在属性案例中,您可以定义属性本身以执行retain / release,方法是将其定义为:

property (readwrite, retain) NSString *text;

然后附加回到:

display.text = [display.text stringByAppendingString:newText];

现在display.text可能是可变字符串,如果您计划向其添加大量值,这是个好主意,就是:

•读/写对象属性(例如property (readwrite, assign) NSMutableString *text;);或

•结构的字段(例如struct { NSMutableString *text; ... }

然后使用以下方法追加新字符串:

[display.text appendString:newText];

就是这样。 (在属性情况下,如果指定了retain并不重要 - 代码是相同的。)

自动垃圾收集,对象所有权以及不可变和可变类型之间的区别是理解Objective-C语义的核心 - 了解所有这些情况,您将会很顺利!