2

Je viens de remarquer qu'il n'y a pas * en face de la déclaration d'un délégué ...Pourquoi n'y a-t-il pas * devant la déclaration du délégué?

Je l'ai fait quelque chose comme ceci:

@protocol NavBarHiddenDelegate; 


@interface AsyncImageView : UIView { 

    NSURLConnection* connection; 
    NSMutableData* data; 
    UIActivityIndicatorView *indicator; 

    id <NavBarHiddenDelegate> delegate; 

} 

@property (nonatomic, assign) id <NavBarHiddenDelegate> delegate; 

- (id)initWithUrl:(NSString*)url; 

@end 


@protocol NavBarHiddenDelegate 

- (void)hideNavBar; 

@end 

Il fonctionne parfaitement bien, mais comme je suis habitué à toujours, mais un * devant les objets que je déclare, pourquoi pas pour celui-ci?!?

Merci,

Gotye.

Répondre

1

Cela n'a rien à voir avec les délégués.

Le type id est différent, pour des raisons historiques; Pensez-y comme any-object *. Chaque fois que vous écrivez id, il n'y a pas *.

S'il y avait une seule classe racine Object pour tous les objets Objective-C alors vous pouvez imaginer que typedef Object * id; - mais il n'y a pas, donc id est différent (bien, en fait, il est défini comme quelque chose comme struct objc_object * si je me souviens bien , mais vous ne devriez pas vous inquiéter de cette implémentation-détail-avec-respect-à-ce-niveau).

1

Parce que id a déjà son * implicite. Si vous ignorez la restriction du protocole puis

id <NavBarHiddenDelegate> delegate; 

devient

id delegate; 

qui ne signifie évidemment pas besoin d'un *. En passant, si le protocole est mis sur un type ObjC alors vous avez besoin du *, par exemple

XXViewController<NavBarHiddenDelegate>* delegate; 
Questions connexes