【问题标题】:Objective-C, why do I need to put this asterix here but not here [closed]Objective-C,为什么我需要把这个星号放在这里而不是在这里[关闭]
【发布时间】:2014-04-07 14:40:47
【问题描述】:

我的问题很简单,为什么我需要为 NSString 而不是 NSInteger 放一个星号?

    NSString *myString = [NSString stringWithFormat:@"Hello, world !"];
    NSInteger myInteger = 42;

【问题讨论】:

标签: objective-c pointers


【解决方案1】:

对于一个 Cocoa 对象,你总是声明一个指针,所以你总是使用一个星号。您不能将对象本身放入变量中;你总是处理一个指向对象的指针。

对于其他事情,这取决于变量是否包含对象(在 C 意义上)或指向对象-somewhere-else 的指针。如果变量应该包含对象,那么您不要用星号声明它,因为您没有在其中放置指针。如果它应该包含一个指针,那么你确实用星号声明它。

在 C 和 Objective C 中,int 是一种原始数据类型。如果你写 int *,这意味着“一个指向 int 的指针”。

很少有链接可以帮助您很好地理解它。

礼貌:-

https://stackoverflow.com/a/5293419/1865424

http://boredzo.org/pointers/

https://stackoverflow.com/a/1173252/1865424

【讨论】:

  • 谢谢,您的回答对我帮助很大!!!我可以问你最后一个问题吗?这是什么技术原因?为什么我不能将对象本身放入变量中,而我可以为 int 做到这一点?
  • 首先看你必须清楚地了解事情是如何工作的,所以我建议你阅读boredzo.org/pointers,它解释了你想知道的关于指针的所有事情。如果在阅读本文后您的问题仍然存在,那么您问,我很乐意为您提供帮助。
  • 好的,我会看的,谢谢!
  • 基元和对象的主要区别是:基元很小,可以存储在堆栈中。另一方面,对象可能不适合堆栈,因此使用指针(适合堆栈)指向对象在堆中的位置(理论上)没有大小限制。
【解决方案2】:

NSInteger 是 int 的 typedef,而 NSString 是指向 NSString 类对象的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 2021-11-02
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多