Używając Xcode 4.2 i ARC, zauważyłem, że automatycznie wygenerowany kod dla NSManagedObject
nadal brzmi tak dla właściwości:
@property (nonatomic, retain) NSString * someString;
1) Nie należy retain
teraz zamieniać na strong
lub weak
?
2) Dlaczego kod generowany automatycznie jest nadal używany retain
3) Jaki jest prawidłowy zamiennik retain
w tym oświadczeniu o właściwościach?
Obecnie debuguję problem za pomocą NSFetchRequest
i pomyślałem, że może to być źródło problemu. Myśli?
Odpowiedzi:
Nie. Nie możesz zastąpić retencji słabym; oni są różni. Silny jest w 100% synonimem zachowania; są identyczne. Możesz użyć dowolnego, więc nie ma tutaj „powinno”. Możesz zastąpić retain na mocny, jeśli chcesz, ale nie musisz.
Dlaczego nie? Zobacz (1). zachowanie jest prawidłowe, więc nie ma problemu.
Nie ma potrzeby wymiany retencji.
Tak nie jest.
źródło
__strong
w innych miejscach w swoim kodzie (nie ma__retain
), możesz chcieć przełączyć się na używaniestrong
dla spójności. Jest to podobne do wcięcia kodu w spójny sposób, mimo że kod będzie działał dobrze bez tego.Aby odpowiedzieć na wszystkie trzy pytania w jednym:
retain
istrong
są ze sobą równoznaczne, więc oba są poprawne. Dokumentacja stwierdzaźródło
retain
wstrong
s. Mam wrażenie, żestrong
jest to preferowany atrybut, ale generator NSManagedObject nie został zaktualizowany. Ale to tylko przypuszczenie; być może nikt w Apple nie uważa tego rozróżnienia za ważny.Przed ARC musisz „zwolnić” obiekt, który został zachowany. Oznacza to, że zatrzymanie ma część przeciwną. Po ARC nie musisz zwolnić. Więc używaj silnego. To wizualna wskazówka, że nie musisz dzwonić do wydania.
źródło
„zachować” jest równe „silnemu”.
„silny” jest używany na przykład:
@property (nonatomic, strong) NSString * someString;
A „__strong” jest używane na przykład:
-(void) someMethod { __strong NSString* vStr = [[NSString alloc] initWithString:@"some string"]; }
W Apple Docs. mówi:
Atrybuty właściwości
Słowa kluczowe słabe i silne są wprowadzane jako nowe zadeklarowane atrybuty właściwości, jak pokazano w poniższych przykładach.
// The following declaration is a synonym for: @property(retain) MyClass *myObject; property(strong) MyClass *myObject;
Apple doc. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
źródło