gpt4 book ai didi

objective-c - 在方法中,指针或实际对象是否作为参数传递?

转载 作者:行者123 更新时间:2023-12-03 17:55:33 26 4
gpt4 key购买 nike

我一直在摆弄一些代码,试图了解 Objective-C 中的指针和内存管理。但是,我似乎无法理解的是使用此代码:

hello *myHello = [[hello alloc] init];

NSString *string = @"Hello";

myHello.property = string;

NSString 实例 (@"Hello") 是否作为参数传递给 setter 方法,或者是否发送指针。例如,如果我将“string”更改为指向不同的对象,然后获取该变量,它仍然是“Hello”还是更改为“string”指向的新对象?提前致谢!

最佳答案

吉姆有一个很好的答案,但我想添加一个视觉答案,因为它可能会帮助人们。

说 *string = @"test"

字符串指向存储@“test”的内存位置

本质上,它看起来像这样:

      @"test"
^
string /

当你这样做时:

myHello.property = string;

您只需将属性设置为字符串所在的同一位置,如下所示;

     @"test"
^
string / \ property

然后,如果您稍后将字符串更改为@“hello”,您将在内存中创建另一个位置,并保留另一个位置。现在就这样了。

      @"hello"  @"test"
^ ^
string / \ property

属性可能被篡改的唯一方法是弄乱指针。由于这种情况可能永远不会发生,因此您无需担心。

一些新手认为这会导致内存问题,但事实并非如此。 ARC 可以告诉您何时完成了属性的操作,并且它会自行删除内存。

希望有帮助!

关于objective-c - 在方法中,指针或实际对象是否作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com