В этой строке:
- (id)initWithName:(NSString *)name;
(NSString *)
- это просто тип аргумента - строковый объект, который является классом NSString в Какао. В Objective-C вы всегда имеете дело с объектными ссылками (указателями), поэтому «*» указывает, что аргумент является ссылкой на NSString
объект.
В этом примере:
person.height = (NSObject *)something;
происходит что-то немного другое: (NSObject *)
снова указывает тип, но на этот раз это операция "приведение типа" - это означает, что нужно взять ссылку на объект "что-то" (что может быть NSString
, NSNumber
или ...) и относитесь к нему как к ссылке на NSObject
.
обновление -
Когда речь идет об объектах Objective-C (в отличие от примитивных типов, таких как int или float), все в конечном счете является указателем, поэтому операция приведения означает «взять этот указатель X
и обращаться с ним так, как будто он указывает на Y
» , Например, если у вас есть контейнерный класс (например, NSArray
), который содержит общие NSObject
s, но вы знаете, что объекты на самом деле являются строками, вы можете сказать:
NSString *myString = (NSString *)[myArray objectAtIndex:0];
, что означает «извлечь первый объект из массива, рассматривая его как строку».
Приведение на самом деле не преобразует значение, это просто способ сказать компилятору: "Эй, я знаю, что я назначаю X для Y здесь, поэтому не давайте мне предупреждения об этом".