Protocols

Introducere

Protocoalele se aseamănă cu @interface doar că altcineva face implementarea. Este similară cu noţiunea de “interfaţă” din Java. Protocolul conţine o listă de metode ce trebuie implementate.

Cuprins

@protocol ExempluProtocol
- (void) metodaExemplu;
@optional
- (void) faCevaCuNumarul:(NSNumber *)numar
- (NSNumber *)faAltcevaCuStringul:(NSString *)string
@property (nonatomic,strong) NSString *altString;
@end

Metodele după directiva @optional nu trebuie implementate neapărat. Celelalte metode dinafara @optional sunt marcate by default cu @required şi trebuie implementate neaparat.

Protocoalele sunt definite de obicei în fişierele header “.h”.

Dacă o clasă ar dori să implementeze protocolul nostru “ExempluProtocol” ar scrie:

#import “ExempluProtocol.h”
@interface ExempluClasa : NSObject <ExempluProtocol>
@end

Imediat după clasa moştenită apare lista cu protocoale implementate care este scrisă între “”. Clasa noastră “ExempluClasa” ar fi obligată acum să implementeze metoda -(void)metodaExemplu. Dacă nu o face, primeşte un warning Incomplete implementation.

Se poate defini o variabilă de tip id care accepta doar obiecte ce implementează un anumit protocol:

// compilatorul nu va da eroare
id <ExempluProtocol> obiect = [[Exemplu clasa alloc] init];
// compilatorul va da eroare deoarece NSString nu implementeaza protocolul   //“ExempluProtocol”
id <ExempluProtocol> obiect = [[NSString alloc] init];

Principala utilizare a protocoalelor: delegates şi data sources!

Deoarece în programarea iOS se foloseşte foarte mult patternul MVC, controllerul se stabileşte ca fiind delegatul view-ului şi implementează metodele din protocol. De fiecare dată când view-ul are nevoie de informaţii apeleaza metodele din protocol implementate de delegat. Deoarece View-ul nu conţine niciodată datele pe care le afişeaza, acesta are nevoie de un DataSource care funcţioneaza la fel ca Delegate.

programare_ios/curs/curs7.txt · Ultima modificare: 2013/07/28 16:41 de către bogdan.vlad
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0