为什么对象有一个指针而不是int?

如果我们输入

MyObject *obj = [[MyObject alloc] init];

“obj”是指向内存地址的指针。

...当我们创建一个int时,我们输入:

int x = 10; 

我们为什么不打字?

int *x = 10; 

问题是,为什么我们需要一个指向对象而不是int,float等的指针......


效率。

将int从一个地方移动到另一个地方很容易。 移动对象需要CPU的更多工作。 移动对象的地址和移动int一样简单。

在普通的C中,出于同样的原因处理指向结构的指针是很常见的。 C使 - >运算符变得容易。


有些语言可以在堆栈上“无指针”地创建对象。 例如C ++。 在栈上有对象的一个​​好处是,当范围结束时它们会自动释放,这有助于内存管理。 它也更快。

在栈上有对象的一个​​坏处是,当作用域结束并且堆栈消失时,它们会自动释放。 由于对象通常比局部变量更长,所以你必须在某处复制对象的内存。 这完全有可能,但它使问题复杂化。

这不仅仅是基于堆栈的对象复杂的内存生命周期。 考虑赋值,两个对象类型的foo = bar 。 如果对象总是指针( Class* ),那么您只需分配一个指针并获得指向相同对象的两个指针; 简单。 如果foo是基于堆栈的( Class ),那么赋值语义开始变得模糊 - 你可以以原始对象的副本结束。

引入一个规则,即所有对象都分配在堆上(“带指针”)是一种很好的简化。 正如它发生的那样,速度差异并不重要,现在编译器现在也可以在超出范围后自动插入代码以释放基于堆的对象,所以它通常是双赢的。


你也可以有指针int,float。

对象在堆上创建。 要访问它,你需要地址。 这就是为什么他们是指针类型。

链接地址: http://www.djcxy.com/p/13889.html

上一篇: Why does object have a pointer and not an int?

下一篇: Why dealing with Value is faster than with Reference for Struct?