【问题标题】:Pointers and Variables in Objective CObjective C 中的指针和变量
【发布时间】:2013-09-11 19:55:02
【问题描述】:
NSString *testString;  
testString = [[NSString alloc] init]; 

无论我读了多少关于它的答案,我都不明白这一点——人们不断地交换术语,说 testString 是一个变量,然后说那是一个指针,我很困惑。

这是我目前的理解。我们在第一行声明了指针testString...然后[[NSString alloc] init]返回一个实际的NSString对象还是NSString对象的地址?

【问题讨论】:

  • 知道某些东西可以既是变量又是指针可能会有所帮助。指针是一种变量。
  • @GregHewgill 也就是说,直到它是一个 const 指针。 :)

标签: objective-c variables pointers


【解决方案1】:

在您的示例中,testString 是“指向NSString 的指针”类型的变量。

所有 Objective C 对象都是通过指针类型的字段和变量来处理的。当他们说“init 返回一个对象”时,该语句的扩展版本应该是“init 返回一个指向对象的指针”。但是,由于所有对象都是通过指针处理的,因此可以安全地删除“指向”说明。

【讨论】:

  • 我发现与“安全地放弃'指向'资格的人的对话”相当累:-S
  • 指针类型的变量是否与实际指针不同,为什么?
  • 那么,“实际”指针会是内存地址吗?这也适用于C吗? ( int *number 创建一个指向 int 类型指针的变量)
  • 你能告诉我一个我们取消引用指向非 objwct 的指针的案例吗?
【解决方案2】:

它返回一个 NSString 的地址。

与许多面向对象的语言一样,Obj-C 使用 references(也称为指针)指向对象。

NSString *testString;

仅创建一个局部变量 testString,该变量目前未定义,但很快将包含对 NSString 对象的引用。

testString = [[NSString alloc] init];

使运行时系统在内存中的某处分配一个 NSString 对象,并返回一个指向内存中该位置的指针。 '=' 运算符将该内存地址分配给变量 testString。

关于互换术语,您的观察是正确的。在实践中,我们倾向于将 testString 视为字符串本身,但它实际上是一个指向任何地方的指针。

记录一下——这适用于所有对象,而不仅仅是字符串。当我们分配一个对象时,会返回一个对新对象的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多