有人可以向我解释一下(NSString *)对Obj-C的意义吗?

时间:2010-05-25 13:58:48

标签: objective-c

我刚开始使用Objective-C,我想了解以下代码行的含义,因为我在objective-c中到处都看到了它,但我并不是100%得到它:

- (id)initWithName:(NSString *)name;

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

另一个例子是:

-(NSString *)name;

person.height = (NSObject *)something;

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

- (id)initWithName:(NSString*)name;

是一个方法的签名,它带有一个名为name的参数,它是指向NSString的指针。

-(NSString *)name;

是一个名为name的访问器方法,它返回指向NSString的指针。

person.height = (NSObject *)something;

something类型转换为NSObject指针,然后将其分配给person.height属性。

Learning Objective-C: A Primer

中查看更多解释

答案 1 :(得分:2)

在这一行:

- (id)initWithName:(NSString *)name;

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

在这个例子中:

person.height = (NSObject *)something;

发生了一些不同的事情:(NSObject *)再次指定一个类型,但这次它是一个“类型转换”操作 - 这意味着采取“某事”对象引用(可能是一个NSStringNSNumber或...)并将其视为对NSObject的引用。


更新 - 在谈论Objective-C对象(而不是像int或float这样的原始类型)时,所有内容最终都是指针,因此强制转换操作意味着“将此指针指向X并将其视为指向{{{ 1}}”。例如,如果您有一个包含泛型Y的容器类(如NSArray),但您知道这些对象实际上是字符串,您可能会说:

NSObject

表示“从数组中检索第一个对象,将其视为字符串”。

演员实际上并没有转换价值,这只是对编译器的一种说法“嘿,我知道我在这里给Y分配一个X,所以不要给我一个关于它的警告”。

答案 2 :(得分:0)

- (id)initWithName:(NSString *)name;
    -----------------------------------------
    '-'  means its an instance method (+ is used for static methods)
    '(id)' is the return type    
    'initWithName' is the function name, the name implies its a constructor
    ':' start of parameter
    '(NSString*)' parameter type
    'name' parameter name

相当于

(id)initWithName( NSString* name )

答案 3 :(得分:0)

(NSString *)name

表示变量name是NSString对象的指针*。它是一个指针,因为name变量不是字符串,而是它只是内存中该字符串的地址。