我还在学习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;
}
谢谢!
答案 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语义的核心 - 了解所有这些情况,您将会很顺利!