【问题标题】:Assigning object pointers分配对象指针
【发布时间】:2011-08-24 20:17:51
【问题描述】:

这个指针分配正确吗?

customclass.somearray = &*otherarray;

其中somearrayotherarrayNSArray 对象。 如果没有,我该如何解决我的问题:
我想与customclass.somearray 分享这个otherarray 对象。我想要所有的改变 制作为customclass.somearray 也制作为原始的otherarray。 这样做,它的工作原理。我只想问,对吗?

【问题讨论】:

  • 如果属性是分配类型,是的。小心内存管理。

标签: objective-c pointers variable-assignment


【解决方案1】:

你的两个变量是相同类型的指针,所以只需将一个分配给另一个:

customclass.somearray = otherarray;

你写这个的方式是不必要的。使用取消引用运算符* 本质上为您提供了指针的“内容”。地址运算符& 相应地为您提供了应用它的地址。您的指针otherarray 包含一个地址。如果你取消引用那个地址然后取那个地址,你最终会回到你开始的地方。

请注意,该赋值的左侧是一个属性访问(假设customclass 也是一个对象,而不仅仅是一个struct)。这意味着编译器会将您的表达式更改为:

[customclass setSomearray:&*otherarray];
// And my version will be changed into:
[customclass setSomearray:otherarray];

也就是说,它变成了一个方法调用,而不是一个简单的赋值。但是,这不会影响您应该使用的语法。

【讨论】:

  • 所以如果我在自定义类中更改我的 somearray 更改也会在 otherarray 中?
  • 是的,尽管这样做很容易出错。您应该考虑将您的数组放在一个单独的模型类中,并让您的其他对象仅在必要时通过该类访问它。
【解决方案2】:

在 Objective-C 中工作时,您从不直接处理对象,而是始终通过指针引用它们。总是。例如,在 C++ 中,您可以在堆栈上声明一个实际对象,但在 Objective-C 中您永远不会这样做。所以,如果你有:

NSArray *otherArray = [NSArray arrayWithObjects:@"foo", @"bar", nil];

那么 otherArray 是一个指向 NSArray 实例的指针。同样,您的 somearray 属性将属于 NSArray* 类型,因此类型将匹配,您只需将一个分配给另一个:

customclass.somearray = otherarray;

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2021-03-29
    • 2017-12-06
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多