有人可以向我解释 (NSString *) 对 Obj-C 意味着什么吗?

Ole*_*dia 4 objective-c

我刚开始使用Objective-C,我想了解以下代码行的含义,因为我在objective-c中随处可见,但我并没有100%完全理解它:

- (id)initWithName:(NSString *)name;
Run Code Online (Sandbox Code Playgroud)

我知道上面这行是一个传递一个参数的实例方法,我不明白的是 (NSString *)name。

另一个例子是:

-(NSString *)name;
Run Code Online (Sandbox Code Playgroud)

或者

person.height = (NSObject *)something;
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Dav*_*har 5

在这一行:

- (id)initWithName:(NSString *)name;
Run Code Online (Sandbox Code Playgroud)

(NSString *)只是参数的类型 - 一个字符串对象,它是 Cocoa 中的 NSString 类。在 Objective-C 中,您总是在处理对象引用(指针),因此“*”表示参数是对NSString对象的引用。

在这个例子中:

person.height = (NSObject *)something;
Run Code Online (Sandbox Code Playgroud)

东西有点不同的正在发生的事情:(NSObject *)再指定一个类型,但是这一次它是一个“类型转换”的操作-这意味着拿“东西”的对象引用(这可能是一个NSStringNSNumber或......)和将其视为对NSObject.


更新 - 当谈论 Objective-C 对象时(与 int 或 float 等原始类型相反),一切最终都是一个指针,因此强制转换操作意味着“获取这个指针 anX并将其视为指向 a Y”。例如,如果您有一个包含NSArray泛型NSObjects的容器类(如),但您知道这些对象实际上是字符串,您可能会说:

NSString *myString = (NSString *)[myArray objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

这意味着“从数组中检索第一个对象,将其视为字符串”。

强制转换实际上并没有转换值,它只是对编译器说“嘿,我知道我在这里将 X 分配给 Y,所以不要给我警告”。