документация динамического типа id - PullRequest
0 голосов
/ 12 сентября 2011

Может кто-нибудь указать мне на конкретную "документацию типа идентификатора"? Я прошел через документы по динамической типизации, но я хочу знать, как использовать идентификатор типа. В частности, как проверить, если идентификатор равен нулю.

Ответы [ 4 ]

3 голосов
/ 12 сентября 2011

Тип id напрямую связан с самим языком Objective-C, а не с платформами Cocoa / Cocoa Touch, как подразумевали ваши оригинальные теги. Также не задействована динамическая типизация. Вот небольшое введение в документы Apple.

Чтобы ответить на ваш конкретный вопрос, цитируемый по ссылке выше:

Ключевое слово nil определяется как нулевой объект, id со значением 0. id, nil и другие основные типы Objective-C определены в заголовочном файле objc/objc.h.

nil и NULL эквивалентны (нулевые указатели) и поэтому взаимозаменяемы.

В базовом операторе if вы просто делаете это:

id myId = [[something alloc] init];

// Short for if (myId == nil)
if (!myId) {
    // myId is nil
} else {
    // myId is not nil
}
1 голос
/ 12 сентября 2011

Я не видел, чтобы это было четко указано в других ответах, поэтому я скажу это здесь:

и id определяется как указатель на объект.

nil равен нулю в качестве идентификатора - (id) 0 - в результате следующий код:

NSString * myString = nil;
id idString = myString;
if (idString == nil) NSLog(@"idString == nil");
if (idString == NULL) NSLog(@"idString == NULL");
if (idString == (id)0) NSLog(@"idString == (id)0");

будет иметь следующий вывод:

2011-09-12 07:25:57.297 Sample Project[22130:707] idString == nil
2011-09-12 07:25:57.298 Sample Project[22130:707] idString == NULL
2011-09-12 07:25:57.299 Sample Project[22130:707] idString == (id)0
1 голос
/ 12 сентября 2011

См. Язык программирования Objective-C - в частности, глава «Объекты, классы и обмен сообщениями».

В Objective-C идентификаторы объектов имеют отдельный тип данных: id. Этот тип является общим типом для любого типа объекта независимо от класса и может использоваться для экземпляров класса и для самих объектов класса. [...]

Ключевое слово nil определяется как нулевой объект, id со значением 0. id, nil и другие основные типы Objective-C определены в заголовочном файле objc / objc.h.

Чтобы сравнить переменные по значению, вы просто используете оператор ==. Итак, чтобы проверить на ноль, вы делаете:

 someVariable == nil
0 голосов
/ 12 сентября 2011

Извините, если я неправильно понял ваш вопрос, но разве вы не сделали бы что-то вроде:

// given
id sender;

if (sender == nil) {}

В основном вы используете id, чтобы поймать любой объект, который может быть ему назначен. Таким образом, вы можете сделать что-то вроде:

id name = [NSString stringWithString:@"john"];

и теперь имя будет NSString объектом, который вы можете проверить, вызвав [name class].

Посмотрите секцию id этой страницы для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...