może ktoś mi wyjaśnić, co robi deklaracja @class w obiektywnym & w jakich przypadkach powinniśmy używać tej deklaracji.Co robi @class w Objective-C?
Odpowiedz
To deklaracja terminowa. Zasadniczo mówi kompilatorowi, że istnieje klasa o tej nazwie. Używam go w deklaracji interfejsu:
@class Foo;
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Oczywiście można importować nagłówek dla Foo
zamiast:
#import "Foo.h"
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Ale jeśli someFoo
nie jest narażony na użytkowników Bar
, będą importować dodatkowy nagłówek plik, który nie przydaje się dla nich. Z deklaracją @class
użytkownicy Bar
nie widzą dodatkowego importu, ponieważ Foo.h
zostanie zaimportowany do pliku implementacji Bar
.
to tak zwana deklaracja terminowa.
używasz tej dyrektywy, aby powiedzieć kompilatorowi, że istnieje klasa objc o podanej nazwie. inne opcje obejmują interfejs lub użyj identyfikatora dla zmiennych lub typów.
jest to pomocne w celu zminimalizowania zależności. Używam ich, kiedy tylko mogę, aby zminimalizować zależności i znacznie skrócić czas budowania.
jest taka sama jak w C i C++:
struct mon_struct;
namespace MON { class mon_class; }
+1 za napiwek, który powinien być preferowany w celu skrócenia czasu budowy. –
@class
służy do tworzenia przodu deklarację dowolnej klasy. Jeśli tworzysz jakąś klasę, której implementacja jest dla ciebie nieznana, możesz to zrobić, korzystając z dyrektywy kompilatora @class
.
Możesz wdrożyć tę klasę, gdy znana jest implementacja.
nadzieję, że pomoże trochę więcej
powyższa odpowiedź już stwierdzić niemal każdą rzecz, chciałbym dodać kilka rzeczy na jej temat.
Numer @class Foo
jest deklaracją typu Foo. To tak, jakby powiedzieć kompilatorowi, istnieje klasa foo Więc nie przejmuj się tym teraz.
Uwaga: - Deklaracja klasy staje się bardzo krytyczna, gdy obie klasy potrzebują się nawzajem. jeśli zrobimy zwykłe polecenie #import, będziemy mieli nieskończoną pętlę importu, a kompilatory nie lubią nieskończonych pętli. Więc używamy @class Classname
.
- 1. Co to jest css "robi [? Class * = moja klasa] .my-podklasa"?
- 2. Co robi * w CSS?
- 3. Co robi% w JavaScript?
- 4. Co to jest „Class :: *”
- 5. Co robi atrybut `# 'w HTML?
- 6. Co robi funkcja .pack()?
- 7. Co Boxen i co robi?
- 8. Co robi bitowe wyłączne LUB robi w Javie?
- 9. Wdrożenie ObjectiveC protokół w szybkim
- 10. Co robi znak @ w jQuery?
- 11. Co robi \ 1 w sed?
- 12. Co robi Collections.unmodifiableSet() w Javie?
- 13. Co robi symbol "@" w Powershell?
- 14. Co robi session_destroy() w PHP?
- 15. Co robi? zrobić w Elixir
- 16. Co robi `` ... znaczy w idź
- 17. Co robi rebaseall w Cygwin?
- 18. Co robi "^: static" w Clojure?
- 19. Co [[]] * 2 robi w pythonie?
- 20. Co robi config.gem (w environment.rb)?
- 21. Co {} robi w ciągu znaków?
- 22. Co robi dodatkowy przycisk "$()" w "$ ($())"?
- 23. Co robi% w poniższym kodzie?
- 24. co robi int() w C++?
- 25. Co robi * ~ w pliku .gitignore?
- 26. Co robi autoload w zsh?
- 27. Co robi <() w Bash?
- 28. Co robi "%% DatabaseEx" w TSQL?
- 29. Co robi DELIMITER // w wyzwalaczu?
- 30. Co robi "Force" w Unecrustify?
Błyskotliwe wyjaśnienie, właśnie nauczyłem się czegoś nowego! Dziękuję – pnizzle
Nadal nie rozumiem tego w pełni i znam jego stary post, ale przykład będzie dobry. Co masz na myśli przez "użytkowników paska", które mają bar jako obiekt w nich? Imean w twoim przykładzie Foo jest obiektem w Bar. Czy w takiej sytuacji różnica między #import i @class jest tak duża? – Esko918
Rzeczywiście wspaniałe wyjaśnienie. Zmierzyłem się z sytuacją wcześniej, w której powinienem był jej użyć. Tak czy inaczej, teraz na pewno mogę. :) – Ron