Qual é o equivalente a métodos protegidos em Objective-C? Eu quero definir métodos que apenas as classes derivadas podem chamar / implementar.
objective-c
LK.
fonte
fonte
Você pode simular o acesso protegido e privado a métodos fazendo o seguinte:
Essas proteções não são, como observou Sachin, aplicadas em tempo de execução (como no Java, por exemplo).
fonte
UIGestureRecognizerSubclass.h
Aqui está o que fiz para tornar os métodos protegidos visíveis para minhas subclasses, sem exigir que eles implementem os métodos. Isso significa que não recebi avisos do compilador em minha subclasse sobre uma implementação incompleta.
SuperClassProtectedMethods.h (arquivo de protocolo):
SuperClass.m: (o compilador agora o forçará a adicionar métodos protegidos)
SubClass.m:
fonte
performSelector
isso.[(id)obj hiddenMethod]
. Dizendo com precisão, o método protegido não é compatível com Objective-C.Acabei de descobrir isso e funciona para mim. Para melhorar a resposta de Adam, em sua superclasse, faça uma implementação do método protegido no arquivo .m, mas não o declare no arquivo .h. Em sua subclasse, crie uma nova categoria em seu arquivo .m com a declaração do método protegido da superclasse e você pode usar o método protegido da superclasse em sua subclasse. Isso não impedirá que o chamador do método supostamente protegido seja forçado no tempo de execução.
fonte
protectedMethod
Outra forma de usar variáveis @protected.
fonte
Você pode definir o método como um método privado da classe pai e pode usar
[super performSelector:@selector(privateMethod)];
na classe filha.fonte
Você pode tipo de fazer isso com uma categoria.
Os métodos não são ocultados se você importar a categoria em outra classe, mas você simplesmente não o faz. Devido à natureza dinâmica de Objective-C, é realmente impossível ocultar completamente um método, independentemente do tipo de instância de chamada.
O melhor caminho a seguir é provavelmente a categoria de continuação de classe, conforme respondido por @Brian Westphal, mas você terá que redefinir o método nesta categoria para cada instância de subclasse.
fonte
Uma opção é usar extensão de classe para ocultar métodos.
Em
.h
:Em
.m
:fonte
@interface
declaração no arquivo .m. Você pode simplesmente declarar uma função e usá-la e ela a tratará como privada.Eu geralmente nomeio o método protegido com o prefixo interno:
fonte