2016-06-20 21 views
0

Es gibt drei Arten von Protokoll-Implementierung:Der Unterschied zwischen ID <protocol> someobject und NSObject <protocol> * someobject

die erste:

@protocol FirstProtocol 
... 
@end 

@property(nonatomic, weak) id<FirstProtocol> delegate; 

Die zweite:

@protocol SecondProtocol<NSObject> 
... 
@end 

@property(nonatomic, weak) id<FirstProtocol> delegate; 

Die dritte:

@protocol SecondProtocol 
... 
@end 

@property(nonatomic, weak) NSObject<FirstProtocol> *delegate; 

Ich weiß nur, das "<NSObject> oder NSObject<protocol>" kann der Delegat NSObject Wähler aufrufen lassen. Aber ich weiß nicht, was der Unterschied zwischen ihnen ist. Und welches ist die beste Praxis?

Antwort

1

Sie machen Angaben darüber, welche Methoden unter delegate aufgerufen werden können.

In id<FirstProtocol> sind die einzigen unterstützten Methoden die in FirstProtocol angegebenen Methoden.

In id<SecondProtocol> sind die unterstützten Methoden die in SecondProtocol und NSObject protocol angegebenen Methoden. Dies gibt Ihnen Zugriff auf -class, -superclass, -isEqual:, -hash, -self, und alle anderen Methoden in der NSObject Protokoll.

In NSObject<FirstProtocol> muss das Objekt eine Art NSObject sein. Es hat Zugriff auf -copy, -mutableCopy und alles andere, was die Klasse NSObject abhängt.