我正在理解目标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);
据我了解,processName是一个指向NSString类型对象的指针.processID是指向NSNumber类型的对象的指针.当在NSLog()中调用它们时,它们的名称前面没有星号,因此应该返回指针值.为什么Obj C中没有'地址'字符?为什么这段代码有效?
感谢您的时间.
目标c中的对象表示为包含所有对象数据的c结构的指针.如果对象是一个实际的结构(而不是指向一个的指针),那么将对象作为方法参数传递效率要低得多.所以一旦你初始化一个对象:
NSString *aString = /* initial value */;
你几乎总是只使用指针aString,而不是取消引用它(即*aString).
NSLog()函数中的%@标记需要指针类型,并将调用该对象上的description方法以确定要输出的值.在NSString对象上调用description方法时,它返回接收方,因此%@标记将被输出中字符串的内容替换.
在%@
您的格式字符串告诉NSLog
调用-description
相关的对象,并使用该字符串的显示值.如果你想要你应该使用的指针的地址%x
或%qx
64位.