ReactiveCocoa pode invocar um método para adicionar uma ligação, ou é um observador.
rac_signalForSelector: acordo vinculativo fromProtocol :( método)
rac_signalForSelector :( método classe de ligao)
princípio:
- Desde atributos associados na classe atual, value: RACSubject
- A maneira de conseguir selector de entrada está definido para _objc_msgForward (O objetivo é deixar de ir este método método chamado fluxo de encaminhamento)
- "Categoria atual" reescrita ou adicionar respondsToSelector: método, verifique a propriedade existe relacionada, existe: retorna SIM, o método de frente próximo passo
- "Categoria atual" reescrita ou adicionar methodSignatureForSelector: método, assinatura do método de construção
- "Classe atual" reescrever ou adicionar forwardInvocation: método 1): método de inspeção pode ser chamado, a execução do método Invoke; 2): obter o atributo classe associada, a execução sendNext RACSubject, o método de embalagem no parâmetro de invocação em RACTuple como parâmetros sendNext.
A razão para todo o método chama um método unificado para ir processo adiante, o objetivo é que você pode facilmente acessar os parâmetros do objeto método de invocação.
notas:
Disse acima "da classe atual", e não o código real para instanciar a classe, mas nós dinamicamente criar uma classe A, classe e herança, então isa ponteiro para o conjunto de classe para classe A (aqui é o uso de KVO princípio de implementação).
Como essa classe é possível adicionar um KVO realizado, ponteiro isa para a classe por isso não é self.class aponta para a classe, e então precisamos reescrever ou adicionar mais métodos nesta classe isa ponteiro aponta para a classe.
Na verdade, para alcançar o padrão de design KVO é o uso de clusters de craveira forma, você pode olhar como os cachos .