views:

40

answers:

2

Is the first parameter supposed to be an object? A tutorial I'm following has the first parameter being textFieldBeingEdited.text, where it is defined in the .h file as

UITextField *textFieldBeingEdited

Isn't textFieldBeingEdited an object, and text is a property of that object?

The following code crashes:

[tempValues setObject:textFieldBeingEdited forKey:tagAsNum];

If I change it to the following then it doesn't crash:

[tempValues setObject:textFieldBeingEdited.text forKey:tagAsNum];

That doesn't make sense though since the first argument is supposed to be an object, and not a property.

+2  A: 

textFieldBeingEdited.text is a property of UITextField, but it is also an object, of type NSString.

Calvin L
+1  A: 

A property is syntactic sugar for a getter method that returns an object and optionally a setter method that takes an object. The text property of the UITextField object provides a getter method that returns an NSString object that can be stored in an NSDictionary.

Essentially, a property provides two methods. For example, the methods implemented/synthesised by the text property may look like this (simplified for the sake of the example):

- (NSString *) text
{
    return text;
}

- (void) setText:(NSString *) newText
{
    if (text != newText)
    {
        [text release];
        text = [newText copy];
    }
}

When you use object.text = @"Hello", it will actually send the setText: message with @"Hello" as the argument, and when you use NSString *value = object.text; it will actually send the text message, which returns an NSString object.

dreamlax
So all properties are objects?
Phenom
No, some properties may be `int`, or other types that are not objects.
dreamlax