2011-10-13 14 views
31

Kiedyś zadeklarować wszystkie właściwości delegata jakoZalecany sposób deklarowania właściwości delegata z ARC

@property (assign) id<FooDelegate> delegate; 

Byłem pod wrażeniem, że wszystko teraz przypisać właściwości powinny być słabe wskaźniki, jest to prawidłowe? Gdy próbuję zadeklarować jako:

@property (weak) id<FooDelegate> delegate; 

otrzymuję komunikat o błędzie podczas próby @synthesize (wygenerowany automatycznie słabe właściwości nie są obsługiwane).

Jaka jest najlepsza praktyka w tym przypadku?

+0

To jest dobre pytanie, a odpowiedzi nie są zbyt jednoznaczne. Mógłbym użyć słabego, ale ramy Apple używają assign (zobacz UIPageViewController, który jest dostępny tylko na iOS5 +). –

Odpowiedz

22

zamiast Zastosowanie __unsafe_unretainedweak dla projektów skierowanych ARC iOS 4 i 5. Jedyną różnicą jest to, że weak Nils wskaźnik gdy zwalniane, a to obsługiwane tylko w iOS 5.

inne pytanie zostanie udzielona odpowiedź Why are Objective-C delegates usually given the property assign instead of retain?.

+0

Jednak kompiluję go na iOS 5, więc myślę, że powinien działać ...: -? – cfischer

+1

To dziwne, jeśli twój "Cel wdrożenia" to 5.0, powinien działać tylko z (słabym). – Jano

23

Xcode 4 Refactor>Konwersja do Objective-C ARC przemienia:

@interface XYZ : NSObject 
{ 
    id delegate; 
} 
@property (assign) id delegate; 
... 
@synthesize delegate; 

do:

@interface XYZ : NSObject 
{ 
    id __unsafe_unretained delegate; 
} 
@property (unsafe_unretained) id delegate; 
... 
@synthesize delegate; 

Jeśli dobrze pamiętam to jest również wymieniona w WWDC 2011 wideo o ARC .

+0

Sprawdzę ponownie wideo. – cfischer

+1

Dlaczego zamiast tego nie należy używać "słabego"? –

+2

To było istotne * 2 * lata temu, kiedy młodsze klang i vintage SDK na iOS zaludniały Ziemię. – djromero

Powiązane problemy