2012-04-28 65 views

回答

3

圆括号构成一个演员操作。即(NSString*) name表示编译器应该将name解释为指向NSString的指针;而(NSString) *name意味着编译器应该将取消引用的值(即值为name)解释为NSString。

+0

但由于Objective-C类是几乎从来没有使用过,除了为指针,铸造'* name'到'NSString'是你永远不应该做的或看到的东西。 – 2012-04-29 00:09:20

+0

@KenThomases Objective-C鼓励使用很少直接使用类类型的类型**。然而它不是“禁止”的,它可以用于例如反省。我更愿意给出解释发生了什么的答案,而不是那种“它是邪恶的,不要这样做”。 – Matthias 2012-04-29 05:21:52

3

你永远不需要使用(NSString)*nameNSString *是一种类型:指向NSString的实例的指针。因此,在这样的方法声明:

- (NSString *)capitalisedString: (NSString *)string 

似乎每次(NSString *)它的意思是“后面的东西有型NSString *”。第一个意味着该方法的返回值是NSString实例,第二个意味着参数string的类型是NSString实例。

这个讨论也适用于铸造,这是当你告诉编译器把一个变量看作是一个特定类型的变量时。由于NSString *是一种类型,你会投这样的:

id object = //... 
NSString *myString = (NSString *)object; 
相关问题