Dla atrybutów, których typ jest niezmienną klasą wartości, która jest zgodna z protokołem NSCopying, prawie zawsze należy podać kopię w deklaracji @property. Określanie zachowania jest coś, czego prawie nigdy nie chcą w taki situation.In non ARC silny będzie działać jak zachowują
Oto dlaczego chcesz to zrobić:
NSMutableString *someName = [NSMutableString stringWithString:@"Chris"];
Person *p = [[[Person alloc] init] autorelease];
p.name = someName;
[someName setString:@"Debajit"];
Obecna wartość nieruchomości będzie Person.name różnią się w zależności od tego, czy nieruchomość zostanie zadeklarowana jako zachowaj, czy skopiuj - będzie to "Debajit", jeśli nieruchomość zostanie oznaczona jako zachowaj, ale @ "Chris", jeśli nieruchomość jest oznaczona jako kopia.
Ponieważ prawie we wszystkich przypadkach nie można zmutować atrybutów obiektu za jego plecami, należy oznaczyć właściwości reprezentujące je jako kopię. (I jeśli sam napiszesz settera zamiast używać @synthesize, powinieneś pamiętać, aby użyć kopii zamiast zachować ją.)
Niezwiązane z odpowiedzią, możesz rozważyć naukę nazewnictwa Cocoa i konwencje projektowe. "Fasola" jest w dużym stopniu terminem Java, a programiści kakao, z którymi możesz pracować, są mało prawdopodobne, aby to zrozumieć. –
oh, tak. Będę edytować. – kongkong
@Catfish_Man to musi być wyprowadzane z języka Java do translatora ObjC, "CocoaBeans";) – justin