I think I learned something today about Objective C properties and retain. It seems that in a method where you reference a property, you need to use the form “self.property_name
” if you want the assigned object to be automagically retained. If you simply say “property_name = some_object
” it doesn’t retain some_object!
Witness the source code and the associated results:
Source: Retain Release main.m
Results:
2008-12-22 20:52:18.824 RetainRelease[3623:10b] Before assignment: [a retainCount] = 1
2008-12-22 20:52:18.837 RetainRelease[3623:10b] After assignment: [a retainCount] = 1
2008-12-22 20:52:18.838 RetainRelease[3623:10b] Before assignment: [b retainCount] = 1
2008-12-22 20:52:18.839 RetainRelease[3623:10b] After assignment: [b retainCount] = 2
2008-12-22 20:52:18.842 RetainRelease[3623:10b] Final [oo retainCount] = 2
Seems to me proof that when you’re assigning to them, you should always reference properties on an object by prefixing them with “self
“.
Caveat: Inside of the setter method for a property, do NOT use the “self.property
” syntax. Otherwise, you end up in a infinite loop. Ask me how I know. 🙂 This is the best (and only) argument I can see for having a different behavior between the “self.property =
” and “property =
” usages.