Как проверить, указывает ли указатель * void на объект NSObject в задаче C - PullRequest
2 голосов
/ 30 декабря 2011

Хотелось бы знать, что ведьма - лучший способ проверить, является ли указатель void на самом деле указателем объекта C (NSObject *) ...

- (id)initWithExecPath:(NSString*)executePath withArgs:(NSArray*)args identifier:(NSString*)identifierString contextInfo:(void*)contextInfo {

// I would like to check here if contextInfo is an NSObject

}

Спасибо ...

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Ознакомьтесь с этой записью на сайте CocoaWithLove :

В этом посте я рассматриваю подход для тестирования, если произвольный Указатель - это указатель на действительный объект Objective-C. Результат от тест не совсем точен и может мешать работе GDB отладка, если указатель не является допустимым местом в памяти, поэтому это не то, что вы хотели бы делать часто (и, конечно, не в производстве код). Но это может быть удобным инструментом отладки, когда вы смотрите вслепую на память ты не выделил.

0 голосов
/ 30 декабря 2011

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

Возможно, вы задаете не тот вопрос; что именно вы хотите сделать, когда узнаете, что это объект NSObject?

0 голосов
/ 30 декабря 2011

Ответ заключается в том, что нет, вы не можете предоставить общий тест для «является объектом Objective C». Любой такой тест должен был бы исследовать внутреннюю структуру объекта и поэтому является хрупким по определению. Существует также возможность получить случайную часть памяти, которая похожа на объект Objective-C, но это не так. например недавно освобожденный объект.

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