English 中文(简体)
Obj-C - 理解指针
原标题:
  • 时间:2008-12-28 01:52:28
  •  标签:

我很困难地理解 Objective C 中的指针。它们的行为不像我根据各种 C 教程所假定的那样。

Example: 例子:

// Define Name and ID
NSString *processName = [[NSProcessInfo processInfo] processName];
NSNumber *processID = [NSNumber numberWithInt:[[NSProcessInfo processInfo] processIdentifier]];

// Print Name and ID
NSLog(@"Process Name: %@  Process Identifier: %@", processName, processID);

据我了解,processName是指向NSString类型对象的指针。processID是指向NSNumber类型对象的指针。当它们同时在NSLog()中被调用时,它们的名称前面没有星号,因此应该返回指针值。为什么在Obj C中没有地址字符?为什么这段代码能够运行?

谢谢您的时间。

最佳回答

在Objective C中,对象被表示为指向C结构体的指针,这些结构体包含所有对象数据。如果对象是实际的结构体(而不是指向结构体的指针),那么将对象作为方法参数传递等操作会变得不那么高效。因此,一旦您初始化了一个对象:

NSString *aString = /* initial value */;

你几乎总是只使用指针aString,而不是对它进行解引用(即*aString)。

NSLog()函数中的%@标记期望一个指针类型,并将调用该对象的description方法来确定要输出的值。当在NSString对象上调用description方法时,它会返回该接收器,因此%@标记会在输出中被替换为字符串的内容。

问题回答

您格式字符串中的%@告诉NSLog调用相关对象的-description方法,并将该字符串用作其显示值。如果您确实想要指针的地址,那么您应该在64位上使用%x%qx





相关问题
热门标签