gpt4 book ai didi

objective-c - noob here-具有不同地址的 objective-c 指针?

转载 作者:搜寻专家 更新时间:2023-10-30 20:04:08 24 4
gpt4 key购买 nike

NSString *msgg = [NSString alloc];
NSLog(@" address that msgg is holding is %p ", msgg);
msgg = [msgg init];
NSLog(@" address that msgg is holding is %p ", msgg);

现在 alloc 意味着 objective-c 进入 memomr 并开出一个空间。该空间的地址保存在指针 msgg 中。

实例也是在同一个空间创建的。所以我希望地址保持不变。但是我到控制台的输出如下。请注意地址不同

BasicObjC[3064:10b]  address that msgg is holding is 0x103340 
BasicObjC[3064:10b] address that msgg is holding is 0xa0289328

最佳答案

在“普通”类(class)中,这应该是正确的(但您不应该依赖它)。但是,在 NSString 的情况下(实际上是苹果的许多数据类: NSData, UIImage ),这个类实际上是一个“类集群”。您使用一个名为“NSString”的对象,但您返回的类是一个 secret 的其他类(很可能是 NSCFString)。 NSString 背后还有其他 secret 类。当您分配一个 NSString 时,它会生成一个“虚拟”对象,然后当您使用特定值调用 init 时,它会确定它实际想要给您的 secret 类(因此是不同的地址)。

一个更容易理解的例子是 UIImage。可以使用许多不同的图像类型(png、jpg 等)创建 UIImage。对你来说,它看起来就像 UIImage,但当你调用 init 时,它实际上会为你引用的每种图像类型返回一个不同的子类。

关于objective-c - noob here-具有不同地址的 objective-c 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5813431/

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