2009-02-27 7 views
14

Czy ktoś może wyjaśnić w sposób zrozumiały dla człowieka, czym jest "ujście"?Co oznacza "wylot" najlepiej w obiektyw-c/kakao?

+0

Co masz na myśli mówiąc "w (sic!) Ludzko zrozumiały sposób?" Jaką część masz trudności ze zrozumieniem? Jakie masz tło? Są ważne, aby stanąć z góry, gdy zadają pytanie. –

+0

Wszystkie rzeczy, które można przeciągać z budowniczego interfejsu (IBOutlet). –

Odpowiedz

10

Po prostu myślę o nim jako wskaźnik do kontroli UI. Kiedyś w moim umyśle zawarłem to mentalne połączenie, miało to sens.

+9

Niekoniecznie. Może to być również NSController lub delegat. Wskaźnik do innego obiektu jest dokładniejszy. –

5

Powiedziałbym, że to most łączący obiekty interfejsu użytkownika z kodem, który ich używa. Tak jak sugeruje nazwa, zapewniają miejsce do "podłączenia" Twojego interfejsu do kodu.

26

Jest to zmienna instancji, która pojawia się w Konstruktorze interfejsów, dzięki czemu można użyć IB do podłączenia innego obiektu do gniazdka.

Po załadowaniu stalówki system ładowania końcówki nubukowej wykona wymaganą magię, aby upewnić się, że odpowiedni obiekt pojawia się w każdym gniazdku.

Edytuj: Zamierzałem napisać pełen post na blogu wokół tego obrazu (zmieniłem zdanie po skończeniu obrazu), ale nawet sam, powinien pomóc wyjaśnić rynki zbytu dla ludzi. Proszę bardzo:

The outlet relationship. http://boredzo.org/images/The-outlet-relationship-small.png

+0

+1 Jakiego narzędzia do rysowania użyłeś? –

+0

Yar: Lineform. http://freeverse.com/lineform/ –

+0

Co jeśli A potrzebuje wiedzieć o B, a A jest obiektem dynamicznie tworzonym (np. NSOperation), a B jest kontrolerem application? – Vassilis

3

IBOutlet jest symbolem, który oznacza, na interfejs Builder zmienną przykład przedmiot delcared jak

IBOutlet id ivar_name; 

powinien być przedstawiony jako wylot na przykład przyporządkowanego klasy. Pozwala to na graficzne łączenie obiektów w Konstruktorze interfejsów w taki sposób, że po załadowaniu NIB (tj. Gdy obiekt zostanie przesłany jako wiadomość -awakeFromNib), wartość nazwy ivar będzie wskaźnikiem do obiektu wybranego jako wartość ujścia w Kreatorze interfejsu .

Z punktu widzenia języka C, IBOutlet nic nie znaczy.

+0

Zatem celem zmiennej 'IBOutlet' jest wskazanie zmiennej instancji na obiekt GUI w pliku' nib' (tak, abyśmy mieli programistyczny dostęp do elementu, który nie został jawnie zakodowany, ale przypisany w interfejsie użytkownika poprzez przeciągnięcie go), które można było zlikwidować, gdybyśmy nie używali Interface Buildera i sami uciekaliśmy się do pisania kodu GUI, prawda? – SexyBeast

11

Z punktu widzenia kodu i IBOutlet jest tylko podpowiedzią dla konstruktora interfejsu. W rzeczywistości jest to makro, które kompiluje się, no cóż, w ogóle. Oznacza to, że kompilator całkowicie usuwa podczas kompilacji.

Ale program Interface Builder może skanować twój kod dla IBOutlet, więc gdy klikniesz prawym przyciskiem myszy obiekt w IB, zobaczysz wszystkie gniazda, które możesz połączyć z innymi obiektami.

alt text http://img27.imageshack.us/img27/5512/picture820090228.png

W tym przykładzie pełnomocnik jest zmienną członkiem UIApplication i jest IBOutlet też.

5

IBOutlet kluczowe jest zdefiniowany następująco:

#ifndef IBOutlet 
#define IBOutlet 
#endif 

IBOutlet robi absolutnie nic, jeśli chodzi o kompilator jest zaniepokojony. Jego jedynym celem jest podpowiedź, aby powiedzieć Konstruktorowi interfejsów, że jest to zmienna instancji, którą będziemy łączyć z obiektem w stalówce. Każda instancja, którą utworzysz i chcesz połączyć z obiektem w pliku końcówki, musi być poprzedzona słowem kluczowym IBOutlet.

0

Wylot to zmienna instancji w kodzie (w kodzie X), do której można przypisać odwołanie do obiektu interfejsu użytkownika (w Kreatorze interfejsów). Podłączasz obiekt interfejsu użytkownika do zmiennej instancji.Przypisanie jest określone w pliku NIB utworzonym przez program Interface Builder.

+0

Możesz spróbować przeczytać inne odpowiedzi na to pytanie. I nie, wyloty są jednokierunkowe. –

+0

Również: Nie, Objective-C nie używa maszyny wirtualnej. Nie, nie ma okresowego sprawdzania zmiennych wyjściowych każdej instancji (takie skanowanie nie ma sensu, ponieważ wyloty są jednokierunkowe i miałyby niewielki sens, nawet gdyby były dwukierunkowe). System nie jest tak skomplikowany, jak ci się wydaje. Naprawdę musisz przeczytać dokumentację: http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/IB_UserGuide/ http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ LoadingResources / –