2010-05-25 54 views
2

我刚开始使用Objective-C,我想了解以下几行代码的意思,因为我在Objective-C随处可见,但我不太得到它100%:有人可以向我解释什么(NSString *)与Obj-C意味着什么?

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

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

另一个例子是:

-(NSString *)name; 

person.height = (NSObject *)something; 

感谢您的帮助

回答

2

相当于在该行:

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

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

在这个例子中:

person.height = (NSObject *)something; 

的东西有点不同的正在发生的事情:(NSObject *)再次指定类型,但是这一次它是一个“类型转换”的操作 - 这是什么意思是取“的东西“对象引用(可能是NSString,NSNumber或...)并将其视为对NSObject的引用。


更新 - 在谈到Objective-C对象(而不是原始的类型,如整数或浮点数),一切都少不了一个指针,以便转换操作的意思是“取这个指针的X,并把它当作如果它指向一个Y“。举例来说,如果你有一个容器类(如NSArray)持有通用NSObject S,但你知道的对象实际上是字符串,你可能会说:

NSString *myString = (NSString *)[myArray objectAtIndex:0]; 

,这意味着“从获取的第一个对象数组,将其视为字符串“。

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

+0

铸造操作是否改变了数值类型?意思是,如果期待一个int,它会变成一个bool,这是正确的吗? – 2010-05-25 14:38:24

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

是采用所谓的name一个参数是一个指针的方法的签名到NSString

-(NSString *)name; 

被称为name的访问方法,返回指针NSString

person.height = (NSObject *)something; 

类型转换somethingNSObject指针,然后它被分配给person.height属性。

看看Learning Objective-C: A Primer

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) 
0
(NSString *)name 

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

+0

这是否意味着我可以访问NSString类的所有方法和属性?让我们假设NSString类有一个名为doS​​omething的方法,然后可以做[name doSomething]? – 2010-05-25 14:35:32

+0

是的,你可以。这是具有对象的整个观点。 – jamone 2010-05-25 14:59:59

+0

只是为了确保。所以如果我有 - (id)initWithName:(NSString *)name;那么在initWithName方法内我可以做[名字soSomething]? – 2010-05-25 15:14:41

相关问题