2013-02-11 2 views
0

Может ли один совет мне, что doesNotRecognizeSelect _cmd будет делатьне может знать doesNotRecognizeSelector _cmd

- (NSDictionary*)Event:(EventBase*)eventBase 
{ 
    [self doesNotRecognizeSelector:_cmd]; 
    return nil; 
} 

[self doesNotRecognizeSelect:_cmd]; Там нет самостоятельного вызова метода, но его призвание, Может ли одна иметь представление о _cmd к doesNotRecognizeSelect

+0

Я предполагаю, что вы пытаетесь применить абстрактный класс или что-то еще? Лучше явно бросать исключение, если вам действительно нужно это делать, делая это, просто сделайте вещи очень запутанными. Кроме того, заглавные имена объектов Objective-C являются чумой для сообщества, пожалуйста, остановитесь :) –

ответ

0
- (void)doesNotRecognizeSelector:(SEL)aSelector 

aВыбор, который является _cmd

В нем указано, что приемник не реализован или не распознан.

Система времени выполнения вызывает этот метод всякий раз, когда объект получает сообщение aSelector, на которое он не может ответить или переадресовать. Этот метод, в свою очередь, вызывает исключение NSInvalidArgumentException и генерирует сообщение об ошибке.

- (id)copy 
{ 
    [self doesNotRecognizeSelector:_cmd]; 
} 

Переменная _cmd - это скрытый аргумент, передаваемый каждому методу, который является текущим селектором; в этом примере он определяет селектор для метода копирования. Этот код запрещает экземплярам подкласса отвечать на копии сообщений или суперклассов при пересылке копий сообщений, хотя отвечает: «Отменить выбор»: все равно сообщит, что получатель имеет доступ к методу копирования.

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