Obj C - 理解指针

blo*_*ilk 2 oop objective-c

我正在理解目标C中的指针.他们的行为与我根据各种C教程假设的行为不同.

例:

// 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);
Run Code Online (Sandbox Code Playgroud)

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

感谢您的时间.

dve*_*ema 11

目标c中的对象表示为包含所有对象数据的c结构的指针.如果对象是一个实际的结构(而不​​是指向一个的指针),那么将对象作为方法参数传递效率要低得多.所以一旦你初始化一个对象:

NSString *aString = /* initial value */;
Run Code Online (Sandbox Code Playgroud)

你几乎总是只使用指针aString,而不是取消引用它(即*aString).

NSLog()函数中的%@标记需要指针类型,并将调用该对象上的description方法以确定要输出的值.在NSString对象上调用description方法时,它返回接收方,因此%@标记将被输出中字符串的内容替换.


Ash*_*ark 7

%@您的格式字符串告诉NSLog调用-description相关的对象,并使用该字符串的显示值.如果你想要你应该使用的指针的地址%x%qx64位.