2010-11-30 43 views
1

Il est facile de comprendre le concept de setter/getter pour une donnée simple, un NSInteger par exemple.Impossible de comprendre le getter/setter avec l'objet

Si nous disons: NSInteger a;

Le setter pour "a" change la valeur de a, et le getter obtient seulement (renvoie) sa valeur. Il est alors facile de comprendre le concept atomique/non-atomique puisque l'atomique garantira que la lecture de "a" quand un est en train de chnager retournera toujours une valeur entière (getter et setter sont synchronisés). Mais ce que je ne comprends pas clairement est setter et getter pour les propriétés qui sont des pointeurs vers des objets (NSData *, NSString * par exemple). Disons par exemple un NSMutableData:

Si nous disons: NSMutableData * m_my_mutable; Imaginez que j'ai un setter setMyMutable et getMyMutable pour cette propriété qui appartient à mon objet MyObject. Si je fais cela, je vais appeler le getter (puisque je reçois l'objet avant Annexer des données):

[[MyObject getMyMutable] appendData ....]

mais appendingData vais aussi modifier, ainsi sould n'est-ce pas considéré comme une action de setter à la place? Ou setter se réfère-t-il seulement au fait d'initier une valeur (qui peut être retenue par exemple).

Il y a quelque chose que je dois manquer dans le concept.

Merci Apple92

Répondre

0

Réglage il est uniquement à l'initialisation. C'est pourquoi l'atomicité n'est pas suffisante pour garantir que les structures de données mutables sont thread-safe. Au lieu de cela, la garantie que vous obtenez est que l'objet sera seulement remplacé ou lu d'un seul coup, de sorte que vous ne vous retrouvez pas avec des affectations partielles.

2

Un setter définit la valeur d'une propriété. Lorsque vous définissez une propriété entière, une nouvelle valeur entière est stockée. Lorsque vous définissez une propriété d'objet, un nouvel objet est stocké. appendData: ne change pas la propriété - il modifie l'objet de données lui-même. Une propriété atomique garantit uniquement que la propriété contient une valeur complète ou une autre - elle n'affecte pas ce que vous faites avec l'objet à l'intérieur de la propriété. Par ailleurs, avoir un état mutable (tel qu'un objet NSMutableData) accessible en dehors de l'objet propriétaire est presque toujours une mauvaise idée. Une fois que vous faites cela, il devient trop facile d'avoir plusieurs objets essayant tous de faire leurs propres changements et de se piétiner les uns les autres.