@property (nonatomic, weak) id a;
@property (nonatomic, weak) id sa;我有两个弱属性。该数组将在复制后释放。但是NSString没有被释放。我不知道有什么区别。为什么不释放字符串?
发布于 2017-04-23 09:05:03
所发生的情况是,您的字符串副本不是一个实际的对象,但是您得到了一个标记指针。基本上,整个字符串都存储在指针中,根本没有分配。在没有分配的地方,就没有要释放的内存,因此弱引用不能重置为nil。
如果查看实际指针0x617325值并将其拆分为字节,就会发现整个字符串:
0x25 - Length (2) + flag (5) telling that it is a tagged string
0x73 - 's'
0x61 - 'a'如果这是一个真正的指针,由于对齐要求,最后一个数字必须是零。这就是让这些有标记的指针成为可能的全部魔力。
发布于 2017-04-23 09:03:49
首先,你的问题不是关于任何有用的东西,而是关于编译器的琐事。
第二,“复制”不需要复制实际的副本,而是要求它表现得好像复制了一个副本一样。由于无法更改可变字符串sa,因此允许sa复制只返回sa,而sa = self.sa只在离开该方法后才释放。
“但是自我是零”--我所说的也是不可能发生的。
https://stackoverflow.com/questions/43568704
复制相似问题