Sto lavorando con un'API basata su blocchi e sono incappato in uno scenario in cui stavo passando un parametro di blocco con una firma che non corrispondeva al parametro typedef'd il metodo si aspettava. Con mia sorpresa, il compilatore non sembrava preoccuparsi di questo, e l'app non si è bloccata. È questo comportamento previsto? Esempio:Passaggio del parametro di blocco che non corrisponde alla firma
typedef void(^MyBlock)();
typedef void(^MyBlockWithParam)(id param);
- (void)doWork {
MyBlockWithParam block1 = ^(id param) {
NSLog(@"block1: %@", param);
};
MyBlock block2 = ^{
NSLog(@"block2");
};
[self loadData:block1];
[self loadData:block2];
}
- (void)loadData:(MyBlockWithParam)block {
block(@"foo");
}
Penso che se hai cambiato il primo a 'void (^ MyBlockType) (void)' avrai un reclamo. Il '()' vuoto indica argomenti non specificati, credo. – nielsbot
Sì, questo ha costretto il compilatore a lamentarsi di ciò allora. Sai se questo è documentato dove (non l'ho visto se c'è)? Se vuoi pubblicare il tuo commento come risposta, lo accetto. Grazie – chinabuffet
Non sono sicuro - ho ricevuto queste informazioni da un'altra risposta su un'altra domanda :) Lasciami guardare. – nielsbot