Может кто-нибудь объяснить мне, что (NSString *) означает с Obj-C? - PullRequest
2 голосов
/ 25 мая 2010

Я только начал с Objective-C, и я хотел бы понять значение следующих строк кода, поскольку я вижу его повсюду в Objective-C, но я не совсем понимаю 100%:

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

Я понимаю, что приведенная выше строка является методом экземпляра, передающим один аргумент, но я не понимаю, что это имя (NSString *).

другой пример:

-(NSString *)name;

или

person.height = (NSObject *)something;

Спасибо за вашу помощь

Ответы [ 4 ]

4 голосов
/ 25 мая 2010
- (id)initWithName:(NSString*)name;

Подпись метода, который принимает один параметр с именем name, который является указателем на NSString.

-(NSString *)name;

Метод доступа, называемый name, который возвращает указатель на NSString.

person.height = (NSObject *)something;

Тип something указывает на указатель NSObject, а затем ему присваивается свойство person.height.

См. Более подробное объяснение в Цель обучения C: Учебник для начинающих

2 голосов
/ 25 мая 2010

В этой строке:

- (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 здесь, поэтому не давайте мне предупреждения об этом".

0 голосов
/ 25 мая 2010
(NSString *)name

говорит, что переменная name является указателем * на объект NSString. Это указатель, потому что переменная name не строка, а просто адрес в памяти для этой строки.

0 голосов
/ 25 мая 2010
- (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 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...