2013-11-08 1 views
-4

В Objective C Я знаю, что звездочка * работает как указатель на создание/определение/инициализацию указателя на объект.Скобка и звездочка в Objective C

Но как насчет звездочки внутри скобки?

Это же

имя (NSString *);

NSString * наименование;

Второй вопрос

Если я объявляю в @ интерфейсе методы без использования @property путь я сделать

- (void) setName:(NSString*) newName; 
    - (NSString*) name; 
    - (void) setSupervisor:(Employee*) newSupervisor; 
    - (Employee*) supervisor; 
    - (void) setSalary:(int) newSalary; 
    - (int) salary; 

Но если я использую @property я

@property (nonatomic, readonly) int employeeNumber; 
    @property (nonatomic, retain) NSString *name; 
    @property (nonatomic, retain) Employee *supervisor; 
    @property (nonatomic, assign) int salary; 

Почему в скобки в NSString, int, Employee исчезли? Почему звездочка перемещается из (NSString *) name; к NSString * Название

Спасибо

CL

+0

Вопрос номер два: Это именно так, как синтаксис языка определяется. Нет «почему», кроме как упростить для парсера возможность справиться с ним во время компиляции. – borrrden

+2

Ницца. Дубликат вашего собственного дубликата. – trojanfoe

ответ

0

Это как раз то, как определяется синтаксис Objective C. В обоих случаях это означает указатель на объект. Возвращаемые аргументы из методов должны быть заключены в круглые скобки в Objective C.

2

Эти:

NSString *name; 

Средство создания указателя на объекте называется имя.

Это:

- (void) setName:(NSString*) newName; 

Означает, что параметр, который получит метод (NEWNAME) будет указатель на строку

И, кстати, я вчера ответил другой подобный вопрос к вам , может быть, пришло время начать чтение некоторых руководств или, по крайней мере, принять некоторые ответы.

+0

Привет Antonio.I'm чтение 3 из них, и я просто получить путают с этим переездом звездочки – london243

+0

Не волнуйтесь, мы здесь, чтобы помочь. Примите несколько ответов. –

+0

Я исхожу из Математического фона и круглых скобок, как вам известно, используют для определения приоритетов, поэтому я думал, что ответ, который вы мне вчера дали, не применялся в этом случае. Спасибо в любом случае – london243

0

Когда вы используете скобки, чтобы заключить класс, вы делаете что-то, называемое кастингом. Кастинг позволяет указать получающему объекту, что входящий объект имеет определенный тип. Например:

float f = (float) myInt; 

Или что-то более полезное, как:

myCustomViewController = (MyCustomViewControllerClass *)navigationController.topViewController 

В случае .topViewController, Xcode будет думать, что он будет возвращать UIViewController и не MyCustomViewControllerClass, поэтому мы должны сказать Xcode что это то, что он получает, поэтому мы можем делать вызовы методов класса. Существуют и другие случаи, когда вы также будете использовать кастинг, например, в объявлениях методов, которые передают параметры. Опять же, вы сообщаете компилятору, что передаваемый объект имеет определенный тип.

Когда вы покидаете от скобки, как в:

NSArray *myArray = [[NSArray alloc] initWith...]; 

вы заявляется, что переменная определенного типа, в данном случае NSArray. Затем вы можете использовать instantiate и использовать его. Важно помнить о различии между ними. Всякий раз, когда вы создаете новую переменную и хотите дать ей класс, оставьте скобки такими, как указано выше.

Для завершения, когда вы видите что-то в квадратных скобках, это метод, вызываемый классом, поэтому [NSString stringWithFormat:@"%@",myString]; вызывает метод класса NSString.

Я надеюсь, что это был какой-то помощи понимания отливок, но для получения дополнительной информации Google «Objective-C Casting», это также называется «Приведение типов».
Mike

+0

Этот вопрос, похоже, не о кастинге, а о объявлениях методов. –

+0

@JoshCaswell ok для получения дополнительной информации. – Mackey18

Смежные вопросы