【问题标题】:How would I display every iteration of this for loop? Objective C我将如何显示此 for 循环的每次迭代?目标 C
【发布时间】:2011-04-10 18:22:19
【问题描述】:

我还在学习 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;
        }

谢谢!

【问题讨论】:

    标签: objective-c arrays loops for-loop


    【解决方案1】:

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

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

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

    那么你需要做的核心是通过附加newText来创建一个new字符串:

    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 语义的核心 - 理解所有这些情况,你就会一路走好!

    【讨论】:

    • 谢谢你,这是一个非常有帮助的答案!我会在完善它后立即发布修复程序!
    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 2018-02-13
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多