4

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

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

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

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

因此,x 被赋值为 count 中的任何值,在本例中为 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?

4

2 回答 2

5

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

  • Objective C 语法允许您在不取消引用的情况下处理对象,这与 C / C++ 不同。
  • str是类型NSString(as myFraction)@"Programming can be a headache"的对象引用,也是类型的对象引用NSString,因此您可以将其分配给str.
于 2012-05-05T10:58:39.200 回答
1

除了宾亚明

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

描述

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

  • (NSString *) 描述
于 2012-05-05T12:40:23.693 回答