-4

在 Objective CI 中,知道星号 * 用作创建/定义/初始化指向对象的指针的指针。

但是当星号在括号内时呢?

这是相同的

(NSString*) 名称;

NSString *名称;

第二个问题

如果我在@接口中声明方法而不使用@property,我会这样做

  - (void) setName:(NSString*) newName;
  - (NSString*) name;
  - (void) setSupervisor:(Employee*) newSupervisor;
  - (Employee*) supervisor;
  - (void) setSalary:(int) newSalary;
  - (int) salary;

但是如果我使用@property 我会

   @property (nonatomic, readonly) int employeeNumber;
   @property (nonatomic, retain) NSString *name; 
   @property (nonatomic, retain) Employee *supervisor;
   @property (nonatomic, assign) int salary;

为什么 NSString, int, Employee 中的括号消失了?为什么星号从 (NSString*) 名称移动;到 NSString *name

谢谢

CL

4

3 回答 3

2

这个:

NSString *name;

意味着创建一个指向名为 name 的对象的指针。

这个:

- (void) setName:(NSString*) newName;

表示该方法将接收的参数(newName)将是一个指向字符串的指针

而且,顺便说一句,我昨天给你回答了另一个类似的问题,也许是时候开始阅读一些手册了,或者至少接受一些答案。

于 2013-11-08T09:00:59.787 回答
0

这正是 Objective C 语法的定义方式。在这两种情况下,它都意味着指向对象的指针。在 Objective C 中,方法的返回参数必须用括号括起来。

于 2013-11-08T09:01:03.607 回答
0

当您使用括号括起一个类时,您正在执行一种称为强制转换的操作。强制转换允许您告诉接收对象传入的对象属于某种类型。例如:

float f = (float) myInt;

或者更有用的东西,比如:

myCustomViewController = (MyCustomViewControllerClass *)navigationController.topViewController

在 的情况下.topViewController,Xcode 会认为它会返回一个 UIViewController 而不是一个MyCustomViewControllerClass,所以我们必须告诉 Xcode 这是它正在接收的内容,这样我们就可以进行类特定的方法调用。在其他情况下,您也会使用强制转换,例如在传递参数的方法声明中。同样,您是在告诉编译器正在传递的对象属于某种类型。

当你去掉括号时,如下所示:

NSArray *myArray = [[NSArray alloc] initWith...];

您声明该变量属于某种类型,在本例中为NSArray. 然后,您可以instantiate使用该变量并使用它。重要的是要记住两者之间的区别。每当您创建一个新变量并想给它一个类时,请像上面一样去掉括号。

为了完成,当你在方括号中看到某个方法被调用时,调用类[NSString stringWithFormat:@"%@",myString];的方法也是如此NSString

我希望这对理解铸件有所帮助,但有关更多信息谷歌“Objective-C Casting”,它也称为“Typecasting”。
麦克风

于 2013-11-08T09:05:32.130 回答