我读了这个答案https://stackoverflow.com/a/833124/5175709和其他一些问题。根据我的理解,由于对象可能会扩展并耗尽空间,因此内存位置也会发生变化。我永远不明白为什么我们不应该**
使用NSMutableData
或NSMutableArray
,因为它们也可以随add
或append
进行扩展需要更多空间。
请在我理解错误的地方纠正我。我很困惑。
答案 0 :(得分:3)
NSMutableData *
和struct MutableData {
void * data;
void (*appendBytes)(void * bytes);
// etc.
};
不是直接指向所包含数据的指针。他们更倾向于这一点:
decompressedFileStream
当他们需要重新分配扩展(或收缩)时,他们正在操作一个内部指针。作为包含实例的用户,您不能与之交互。
答案 1 :(得分:2)
对象引用只需要是单指针,因为它与它们管理的内存无关。例如,NSData
类(NSMutableData
的超类)可能包含以下实例变量:
(这是猜想,因为我无法访问源代码)
@interface NSData : NSObject
{
void *_data;
NSUInteger _length;
}
@end
如果NSMutableData
子类想要添加到数据缓冲区,它可以在realloc()
上执行_data
并增加_length
。
指向NSMutableData
对象本身的指针根本不会改变,并且它管理的内存对开发人员是隐藏的。