У меня есть указатель на объектный класс C, на который мне нужно отправить сообщения. Указатель потенциально может быть любым, поэтому мне нужно убедиться, что он будет отвечать на мои сообщения, прежде чем отправлять их. Вот функция, я использую, чтобы сделать проверку:Как узнать, является ли указатель NSObject?
int delegatePreparedForSelector(id delegate, SEL aSelector) {
if (delegate
&& [delegate isKindOfClass:[NSObject class]]
&& [delegate respondsToSelector:aSelector]) {
return YES;
}
return NO;
}
Проблема заключается в том, что иногда указатель делегата является struct objc-object *
и я получаю EXC_BAD_ACCESS
плохую ошибку доступа, когда я отправить сообщение isKindOfClass
.
Есть ли лучший тест, который я должен использовать, чтобы определить, будет ли делегат отвечать на мои сообщения?
В этом проблема. Когда делегат освобождается и устанавливается на 'nil', для его типа устанавливается значение' struct objc_object * ', которое я видел в отладчике. – kubi
Если делегат был равен нулю, вышесказанное не сработало бы. – bbum
nil отличается от deallocated – slf