Czy każdy IBOutlet powinien mieć swoją własność?

Tworzymy właściwość dla zmiennej do użycia jej w innym widoku. To samo robimy dla IBOutlets . Ale nie zawsze za ich używanie. Czy konieczne jest tworzenie właściwości dla każdego Iboutleta, który właśnie stworzyliśmy nasz xib? Czy jest to tylko dobra praktyka?

Author: sergio, 2011-08-01

6 answers

Lubię patrzeć na to pod kątem łatwości zarządzania pamięcią i dostępu zewnętrznego. Jeśli potrzebujesz dostępu do niego zewnętrznie, oczywiście zrób nieruchomość. (Yes Easy of memory management, if it 's easy you won' t burst it up, if you don 't burst it up it doesn' t become a bug later)

80% czasu mój kontroler widoku ma Iboutlety i nikt inny nie ma do nich dostępu, dlatego ivars działa. Problem polega na tym, że gdy nie używasz @property, przypisana wartość jest nadal zachowany . Więc musisz pamiętać, aby go zwolnić, mimo że sam go nie zachowałeś, co uznałem za sprzeczne z intuicją.

Z tego powodu zwykle używam @property (assign) dla tych, których Nie będę zmieniał, a @property (retain) dla wszystkiego innego i nigdy nie deklaruję IBOutlets bezpośrednio jako ivars.

Przykład:

@interface something : NSObject {
    //This one needs to be RELEASED then set to nil in both viewDidUnload, and dealloc.
    IBOutlet UILabel * myLabel;
    //also cannot be accessed outside of "something" class (technically it can, but don't do that)
    //I NEVER declare my outlets this way.
}

//This one can just be set to nil in viewDidUnload and dealloc
@property (nonatomic, retain) UILabel * myOtherLabel;
//it can also be accessed from mySomething.myOtherLabel by any other class.

//This one just works. I don't own it, the view owns it, so I don't retain/release.
@property (nonatomic, assign) UILabel * myOtherOtherLabel;
//It also provides access to outsiders.
//I wouldn't recommend using this type if you want to change the value though.
 10
Author: Alex Gosselin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 11:27:39

Nie jest konieczne tworzenie właściwości dla każdego IBOutlet.

W szczególności, jeśli uzyskujesz dostęp do gniazdka tylko z klasy, w której jest zadeklarowana, nie potrzebujesz ściśle właściwości. Jeśli masz nieruchomość, masz zalety, które oferują właściwości, ale zawsze możesz bezpośrednio skierować outlet bezpośrednio.

Jeśli planujesz uzyskać dostęp do gniazdka z innej klasy, wtedy właściwość jest przydatna, więc nie musisz definiować sobie metod setter i getter.

 4
Author: sergio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 11:00:18

Jeśli chcesz używać IBOutlet tylko dla widoku, dla którego utworzyłeś XIB, nie musisz tutaj ustawiać właściwości. Ale tak, jest to dobra praktyka, aby używać, ale nie obowiązkowe do korzystania za każdym razem tworzymy IBOutlet dla widoku.

 1
Author: AppAspect,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 11:00:34

Jeśli to, co chcesz wyświetlić, Nie ulegnie zmianie, możesz pominąć tworzenie Właściwości lub IBOutlet dla tego widżetu.

Na przykład na ekranie, gdzie masz etykietę i pole tekstowe, a etykieta zawsze ma łańcuch "Name:" i textfield jest używany do pobierania danych od użytkownika, musisz po prostu utworzyć punkt odniesienia dla pola tekstowego, aby uzyskać dostęp do danych wejściowych od użytkownika. Tworzenie punktu odniesienia dla etykiety nie ma tu żadnego sensu.

I hope you Rozumiem.

 0
Author: Praveen S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 10:57:31

Właściwości to funkcja w Objective-C, która pozwala nam automatycznie generować Accesory, a także ma inne zalety. tak jak Praveen s dał ci przykład z etykietą i UIText po prostu mało odkrywam. Powiedzmy, że nie masz nic wspólnego z UILabel nie musisz dokładnie ustawiać properites, ale jeśli prosisz użytkownika o podanie tekstu do Twojego pola UITextField, musisz ustawić właściwości. a jeśli ustawiasz właściwości za pomocą zachowaj, musisz zwolnić je w viewDidUnload.

 0
Author: Praveen-K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 11:08:03

Jeśli chcesz zmienić zawartość wyświetlacza, powinieneś dodać właściwość..dla przykładu, jeśli chcemy zmienić tekst etykiety, musimy użyć właściwości IBOutlet nd, aby móc dostać się do kontrolki etykiety, którą framework zbuduje z naszej nib..

 0
Author: shweta thakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 11:37:15