2013-03-06 9 views
5

należy stosowaćUżywanie słabych z własnością tylko do odczytu?

@property (nonatomic, weak, readonly)

lub

@property (nonatomic, readonly)?

Osłabienie ma tę zaletę, że usuwa instancję, jeśli zostaje zwolniona, ale czynie tylko sugeruje słabość? Czy jednoznacznie zadeklarować właściwość jako słabą, jeśli chce słabego zachowania?

Odpowiedz

5

Jeśli chcesz zachować wskaźnik do obiektu, który nie jest Twoją własnością, ale chcesz, aby był ważny tylko tak długo, jak istnieje, musisz użyć słabego wskaźnika, ponieważ gdy zostanie zwolniony przez właściciela, twój wskaźnik automatycznie ustawi się na zero i nie wskaże pamięci, której nie powinien.

Oba mają znaczenie differnect, readonly nie sprawia żadnej różnicy, jeśli jest słaba lub silna.

@property (nonatomic, weak, readonly) 
@property (nonatomic, readonly) 

Można również znaleźć niektóre reference here.

+3

dodać do odpowiedzi @ AnoopVaidya readonly po prostu mówi kompilatorowi, aby wygenerował tylko getter, a nie setter. Daje również dobre ostrzeżenie, jeśli spróbujesz bezpośrednio zmienić tę właściwość. – JiuJitsuCoder

2

Słabe lub mocne w żaden sposób nie jest związane z czytaniem ani odczytywaniem. Żadne nie implikuje drugiego.

Silna relacja staje się własnością. Słaby nie otrzymuje, ale otrzymuje usługę unieważnienia po usunięciu powiązanego obiektu.

Readonly powstrzymuje setera (afaik). Własności nie można zmienić spoza jej klasy. Readwrite (który jest domyślny, jeśli żaden nie jest określony) pozwala na zmiany właściwości.

To w zasadzie to. To są dwa ustawienia, które nie są ze sobą powiązane. Działają we wszystkich możliwych kombinacjach.