A property is not the same thing os a instance variable, you should read a little bit of them, there‘s plenty of sources in the internet.
Summarizing, a property is the combination of the instance variable (by default, automaticated declaraded with a underscore), and it‘s get and set methods.
To access the property inside your class, you should call for self.propertyName
, in your case it would be self.myTextfield
. This will access the gererated get method of the property. You can always, of course if you are inside the class, skip the get method and access the variable directly. In this case, it would be _myTextfield
.
If you are not confortable with this automaticated instance variable generated, you can always declare your own and bind it with the property with the @synthesize
command. Like this:
@synthesize myTextfieldProperty = myTextfieldVariable;
Here‘s more information about the synthesize
. As I said before, this command binds one iVar to a property. So, when you execute the line above, inside your class, you can either reference to the iVar directly, calling myTextfieldVariable
, or by the property, self.myTextfieldProperty
(there are a few differences actually between them, but I‘m not entering in details).
If you don‘t write the synthesize
, what xcode does for you, automatically, is this:
@synthesize myTextfield = _myTextfield;
So, in your case, as you does not synthesize your property, xcode automatically created the iVar with the underscore in the beginning. It‘s just a pattern that xcode follows.
The line @synthesize myTextfield;
, without binding an iVar directly, is simple the same as
@synthesize myTextfield = myTextfield;
i.e. you are creating an iVar with the same name of your property. And why these two lines are actyally the same thing? I don‘t know, again, it‘s just a pattern that xcode follows.