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 classCObjects
są ClassC
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?"
+1: co było w trakcie mówienia, ale powiedziałem lepiej :) – Mac
Taka była moja realizacja, ale chciałem się upewnić, że w rezultacie nie naruszyłem ważniejszego dyrektora projektu. Pracuje dla mnie. :) – LucasTizma
'' 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. –