2011-02-08 8 views
7

Jestem świadomy, że ogólną zasadą jest, że powinieneś zaimportować tylko to, co jest niezbędne - interfejsy klasy bazowej, interfejsy protokołów itp. - dla klasy, która skompiluje i użyje @class dla wszystkiego, co może być zadeklarowane w przód. Jednak wpadłem na następujący scenariusz, w którym czułem się jak #import było bardziej odpowiednie rozwiązanie:Czy zawsze należy #wyrażać więcej niż bezwzględnie konieczne w interfejsach Objective-C?

#import "ClassA.h"  // Previously, @class ClassA; 
#import "ClassB.h"  // Previously, @class ClassB; 
#import "ClassC.h"  // Unnecessary to forward-declare 

@interface ClassD : NSObject 

@property (nonatomic, retain) ClassA * classAObject; 
@property (nonatomic, retain) ClassB * classBObject; 
@property (nonatomic, copy) NSArray * classCObjects; 

@end 

Początkowo, po prostu do przodu oświadczył ClassA i ClassB (jako składniki classCObjectsClassC tylko na podstawie umowy). To był mój początkowy instynkt.

Ale po próbuje użyć ClassD gdzie indziej, szybko zorientował się, że miałem również importować ClassA, ClassB i ClassC wraz z ClassD wszędzie użyłem go. Wydaje się, że inna klasa nie powinna się martwić, gdy używasz ClassD. Myślałem, że w zasadzie użytkownik ClassD powinien naprawdę dbać tylko o importowanie ClassD.h i zakładać, że może on pracować z całą klasą bez wielu innych instrukcji #import. Biorąc pod uwagę powyższe podejście, zasadniczo włączyłem wszystko, co niezbędne do pracy w domenie ClassD bezpośrednio w interfejsie.

Czy istnieje silny powód, dla którego takie podejście nie jest idealne, z wyjątkiem "uwzględniono więcej niż jest to absolutnie konieczne do kompilacji?"

Odpowiedz

10

Podczas gdy strategia jest ogólnie przestrzegana - nie importuj więcej niż to konieczne - jest niesamowity, elegancki styl i świetna rzecz do celowania w ogóle, nie przejmuj się zbytnio trudnymi sprawami. Tylko #import, czego potrzebujesz.

W praktyce na współczesnej maszynie jedynym efektem będzie dodanie kilku nieobserwowalnych mikrosekund do czasu kompilacji. Skorzystaj z czasu programisty, który zaoszczędzisz, aby Twoja aplikacja stała się bardziej realistyczna. :)

+0

+1: co było w trakcie mówienia, ale powiedziałem lepiej :) – Mac

+0

Taka była moja realizacja, ale chciałem się upewnić, że w rezultacie nie naruszyłem ważniejszego dyrektora projektu. Pracuje dla mnie. :) – LucasTizma

+1

'' import' może być pojedynczym najlepszym ulepszeniem w stosunku do prostej C oferowanej przez Obj-C. ;) Używaj go, kochaj i nie poci. I tak się toczę. Powodzenia. –

1

Jako programista należy kontynuować deklarację zajęć tam, gdzie jest to możliwe. Znacznie skraca czas kompilacji dużych projektów. Ale spędzanie zbyt dużej ilości czasu na zadeklarowanym zgłoszeniu nie jest żadnym sposobem, który pomoże ci zaprojektować bardzo atrakcyjną aplikację. Tak więc, jeśli możesz przesłać dalej, zadeklaruj zrób to:, ale , to nie musi być.

Powiązane problemy