2013-05-15 15 views
7

rynki zbytu mogą być tworzone jak tenIBOutlets silne lub słabe

@interface SearchViewController : UIViewController<UISearchBarDelegate> {  
    IBOutlet UIView *viewSearchBar; 
    IBOutlet UIScrollView *scrollVieww; 
    IBOutlet UILabel *lblName; 
} 

a także jak to

@interface SearchViewController : UIViewController<UISearchBarDelegate> { 

} 

@property(nonatomic, weak) IBOutlet UIScrollView *scrollVieww; 
@property(nonatomic, weak) IBOutlet UIView *viewSearchBar; 
@property(nonatomic, weak) IBOutlet UILabel *lblName; 

@end 

Znam nonatomic/atomicstrong/weak w ARC, ale w pierwszym przykładzie jakie są one? strong, weak, nonatomic lub atomic.

Proszę wyjaśnić lub połączyć mnie z niektórymi szczegółami.

+1

Szczerze mówiąc nie ma znaczenia, czy placówki należą W widoku ARC deklaracja jest silna lub słaba, ponieważ widok będzie silnie odwoływał się do tego elementu. – Joe

+0

@Joe tak Zgadzam się, ale nadal chcę wiedzieć, co oni są –

+0

@ lxt widziałem to pytanie wcześniej, to nie wyczyść mnie dla tego –

Odpowiedz

7

Zmienne instancji pod kontrolą ARC to domyślnie mocna. Nie są one ani atomowe, ani nieatomowe, ponieważ są po prostu zmiennymi instancji, a nie metodami dostępowymi. Flagi atomowe/nieatomowe są powiązane z wielowątkowością. Określają, czy metody dostępu powinny być atomowe. Kiedy accessor jest atomowy, wykonanie nie może zmienić się na inny wątek w środku metody akcesora. Kiedy jest nieatomowy, nie ma takiego ograniczenia.

Uwaga: IBOutlet to typedef z niczego. To tylko flaga dla Konstruktora interfejsu i nie ma funkcji związanych z pamięcią.

+2

+1 Przy okazji, (i wiem, że już to wiesz, ale z myślą o przyszłych czytelnikach), mam nadzieję, że czytelnicy nie zinterpretują twojego komentarza jako sugerującego, że uczynienie go 'atomowym' zapewnia bezpieczeństwo wątku. Tak nie jest. Zobacz [Właściwości są domyślnie Atomowe] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW37) w przewodniku "Programowanie z Objective-C_". – Rob

+0

Dla tych, którzy zastanawiają się, jaka jest dokładna definicja 'IBOutlet' (z dokumentacji): Identyfikator użyty do identyfikacji właściwości, więc Konstruktor interfejsu może zsynchronizować wyświetlanie i połączenie gniazd z Xcode. Wstaw ten identyfikator bezpośrednio przed typem w deklaracjach. –

3

Ogólna zasada, cokolwiek z IBOutlet powinno być uznane za słabe.

Spójrz na weak or strong for IBOutlet and other.

+0

Dziękuję za linkowanie mojej odpowiedzi;) –

+1

+1 Wszystko, co mamy (z wyjątkiem obiektów na najwyższym poziomie, co jest niezwykłe, że kiedykolwiek masz do tego swój własny "IBOutlet"), powinno być słabe. Zobacz [Zarządzanie cyklami życia obiektów] (https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conoa/Contemporary/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051-CH4-SW6) w Przewodniku programowania zasobów. – Rob

5

Zmienne są __strong domyślnie pod ARC tak:

IBOutlet UIView *viewSearchBar;

jest taka sama jak

IBOutlet __strong UIView *viewSearchBar;

W odniesieniu do zalecany sposób radzić sobie z IBOutlets pod ARC patrz: the answer to this

+0

, więc powinniśmy użyć drugiego podejścia? –

+0

Jak powiedział, są takie same. Nie ma znaczenia. Zalecam, aby po prostu go pominąć i tylko wyraźnie określić coś tak silnego, gdy jest to naprawdę ważne lub nieoczekiwane. – DrummerB

+3

Zaleca się, aby IBOutlets były generalnie słabe. Zobacz połączone pytanie, które dodałem do odpowiedzi. –