关于Objective-c的指针

最后发布: 2012-05-05 10:52:05


问题

根据我的理解(如果我错了,请纠正我):

int x, count = 10;
int *hello;
hello = &count;
x = *hello;

这里变量x和count声明为整数类型。 此外,变量计数的值为10。

hello是一个指向整数类型的指针。 然后为hello分配计数地址。 为了访问count的值,你好前面必须有一个星号,即* hello。

因此,x被赋予计数中的任何值,在本例中为10。

然而...

Fraction *myFraction = [[Fraction alloc] init];
[myFraction someMethod];

在这里,如果我理解正确,myFraction是一个指向Fraction类实例的指针。

myFraction指向(或者更确定地指定了地址)已分配内存并初始化的对象。

当然,为了访问myFraction指向的对象,我应该写:

 [*myFraction someMethod];

鉴于x访问count的值的方式,当然为了访问该对象,应该写这个而不是:

[myFraction someMethod]; 

另外,如果我有

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *str = @"Programming can be a headache";
NSLog (@"%@\n", str);

为什么str被视为上面的一个对象? 或者是str一个对象,在这种情况下,为什么我要让它指向一个NSString类的实例? 当然,我应该能够只为str分配一个对象?

objective-c pointers nsstring dereference
回答

目标c中对象的所有使用都是通过对象引用完成的,例如指针。

  • Objective C语法允许您在不解除引用的情况下处理对象,这与C / C ++不同。
  • strNSString类型的对象引用(作为myFraction )和@"Programming can be a headache"也是NSString类型的对象引用,因此您可以将它分配给str


回答

Binyamin的补充

  • 括号[]内的所有内容都是Objective-C而不是简单的C(所以[* object message]不常用)
  • [对象消息],您将“消息”发送到您的对象,并且该对象以某种方式响应(他可以返回某些内容,或者他可以做任何事情而无需任何回报)。
  • 左边带*的所有东西都是指针。 所以* str是一个指针。 它指向哪里? 到一个对象NSString。 @“blabla”返回由编译器直接生成的一个CONSTANT字符串的地址。
  • NSLog(@“%@ \\ n”,str); 这里%@调用名为str的NSString对象的+ Description类方法。 默认情况下,NSString对象的描述返回字符串(文本)的值。 %@不是简单的替换,如%d与数字(int,double等)。 所有对象都有+ Description方法,它继承自NSObject(注意是Class方法而不是即时方法)。

描述

返回表示接收类内容的字符串。

  • (NSString *)说明