I've been googling around and don't really understand the attributes used for @property declarations... Is this only applicable if I am doing multi-thread programming? And in fact is multi-threading going to happen even if I do not explicitly write a multi-threaded program, if the application generates events that concurrently access the same instances? (I don't know how, I am just theorizing). A related question is why is there a "retain" attribute. What I mean is, shouldn't ALL setters retain then release? Why bother to set that unless you don't want to retain before releasing, and why would you do such a thing? Help appreciated to get me (and others googling this question) on the right track. Thanks!