gpt4 book ai didi

ios - 当弱对象 = [NSMutableString copy] 时,谁持有 [NSMutableString copy]?

转载 作者:技术小花猫 更新时间:2023-10-29 11:21:20 29 4
gpt4 key购买 nike

@property (nonatomic, weak) id a;
@property (nonatomic, weak) id sa;

我有两个弱点。数组将在复制后释放。但是 NSString 没有被释放。我不知道有什么区别。为什么字符串没有被释放?

  • 查看代码和输出:

    {
    NSMutableString *sa = [[NSMutableString alloc] initWithString:@"sa"];
    NSMutableArray *array = [NSMutableArray arrayWithObject:@"aaa"];
    self.a = [array copy];
    self.sa = [sa copy];
    NSLog(@"array:%p", array);
    NSLog(@"self.a:%p", self.a);
    NSLog(@"self.sa:%p", self.sa);
    }
    array:0x6000000479b0
    self.a:0x0
    self.sa:0xa000000000061732

最佳答案

发生的情况是您的字符串副本不是实际对象,但您得到了一个 tagged pointer .基本上整个字符串都存储在指针内部,根本没有分配。没有分配的地方就没有内存可以释放,所以弱引用无法重置为 nil

如果您查看实际指针 0x617325 值并将其拆分为字节,您会发现整个字符串:

0x25 - Length (2) + flag (5) telling that it is a tagged string
0x73 - 's'
0x61 - 'a'

如果这是一个真正的指针,由于对齐要求,最后一位必须为零。这就是使标记指针成为可能的全部魔力。

关于ios - 当弱对象 = [NSMutableString copy] 时,谁持有 [NSMutableString copy]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43568704/

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