提问人:mfaani 提问时间:4/15/2016 最后编辑:Communitymfaani 更新时间:9/19/2016 访问量:58
为什么可变对象不需要双指针?
Why don't mutable objects require double pointers?
问:
我 https://stackoverflow.com/a/833124/5175709 和其他一些问题阅读了这个答案。据我了解,由于对象可能会扩展并耗尽空间,因此我的内存位置也会发生变化。我从来不明白为什么我们不应该使用 for 或因为它们也可以随着任何 ing 或 ing 而扩展并且需要更多空间。**
NSMutableData
NSMutableArray
add
append
请纠正我理解错误的地方。我很困惑。
答:
3赞
jscs
4/15/2016
#1
NSMutableArray *
并且不是直接指向所包含数据的指针。它们更像是这样:NSMutableData *
struct MutableData {
void * data;
void (*appendBytes)(void * bytes);
// etc.
};
当他们需要重新分配扩张(或收缩)时,他们正在操纵一个内部指针。作为包含实例的用户,您不会与该实例进行交互。
2赞
trojanfoe
4/15/2016
#2
对象引用只需要是单个指针,因为它与它们管理的内存无关。例如,类(的超类)可能包含以下实例变量:NSData
NSMutableData
(这是猜想,因为我无法访问源代码)
@interface NSData : NSObject
{
void *_data;
NSUInteger _length;
}
@end
如果子类想要添加到数据缓冲区中,它可以执行 on 和 increase 。NSMutableData
realloc()
_data
_length
指向对象本身的指针根本不会更改,并且它管理的内存对开发人员是隐藏的。NSMutableData
评论
0赞
mfaani
4/15/2016
谢谢,所以他们实际上使用的是指针到指针,但我们只处理引用?
0赞
trojanfoe
4/15/2016
@asma22 从哲学上讲,是的,但不是在语言意义上。例如,取消引用指针不一定指向该成员;如果之前出现,该类将同样有效。Object **
NSMutableData
_data
_length
_data
评论