NSArray和NSString

Spa*_*ost 5 objective-c instance nsstring nsarray

我正在阅读的这本书让我写下面的代码:

-(IBAction)displaySomeText:(id)sender {
    NSString *cow = @"Milk";
    NSString *chicken = @"Egg";
    NSString *goat = @"Butter";

    NSArray *food = [NSArray arrayWithObjects:cow, chicken, goat, nil];

    NSString *string = @"The shopping list is: ";
    string = [string stringByAppendingString:[food componentsJoinedByString:@", "]];

    [textView insertText:string];
Run Code Online (Sandbox Code Playgroud)

}

我理解数组如何工作,但我需要帮助理解以下代码

string = [string stringByAppendingString:[food componentsJoinedByString:@", "]];
Run Code Online (Sandbox Code Playgroud)

我从来没有见过这样可能的实例.

他让我从NSString课堂上创建一个'字符串'对象,然后我就这样做了

string = [string stringByAppendingString:];
Run Code Online (Sandbox Code Playgroud)

我糊涂了.我从未见过一个示例,我在其中创建一个对象,然后对同一个对象执行一个方法并将其存储在完全相同的对象中.

例如,我知道我可以做到这一点

NSSound *chirp;
chirp = [NSSound soundNamed:@"birdChirp.mp3"];
Run Code Online (Sandbox Code Playgroud)

以上是有道理的,因为我使用了创建的对象并对其执行了类方法.

但我总是认为以下代码的等价物是不可能的

chirp = [chirp methodNameEtc..];
Run Code Online (Sandbox Code Playgroud)

我希望我能很好地解释我的问题.如果不是,我总是可以进一步阐述.

NJo*_*nes 4

我认为这是您问题的核心“我很困惑。我从未见过创建对象然后在同一对象上执行方法并将其存储在完全相同的对象中的示例。”

要回答这个问题,您实际上并不是“将其存储在完全相同的对象中”。你所做的事情令人困惑pointers并且objects

让我们看看这一行:

string = [string stringByAppendingString:@"Hello"];

在这一行中 'string' 是 a pointer,而不是object它指向的。这行代码的意思是:“Object当前由pointer‘字符串’引用,返回给我一个新的NSString object,其文本是您添加了此文本的文本。当我得到这个新的时,NSString object我命令让pointer‘字符串’指向object它”。