메시지를 보낼 필요가있는 objective-C 클래스의 포인터가 있습니다. 포인터는 잠재적으로 무엇이든지 될 수 있으므로 보내기 전에 메시지에 응답 할 것인지 확인해야합니다.포인터가 NSObject인지 어떻게 알 수 있습니까?
int delegatePreparedForSelector(id delegate, SEL aSelector) {
if (delegate
&& [delegate isKindOfClass:[NSObject class]]
&& [delegate respondsToSelector:aSelector]) {
return YES;
}
return NO;
}
문제는 때때로 위임 포인터가 struct objc-object *
점이다와 내가 isKindOfClass
메시지를 보낼 때 나는 EXC_BAD_ACCESS
나쁜 액세스 오류 : 여기가 검사를 수행하는 사용하고 기능입니다.
위임자가 내 메시지에 응답할지 결정하기 위해 사용해야하는 테스트가 더 있습니까?
이것이 문제입니다. 델리게이트가 할당 해제되고'nil'으로 설정되면, 타입이 struct objc_object *'로 설정됩니다. 이것은 디버거에서 보았습니다. – kubi
위임자가 nil 인 경우 위의 내용은 충돌하지 않습니다. – bbum
nil은 할당 해제 된 것과 다릅니다. – slf