setObject:forKey:NSMutableDictionary的方法

时间:2010-07-27 01:17:39

标签: objective-c cocoa-touch

第一个参数应该是一个对象吗?我正在关注的教程的第一个参数是textFieldBeingEdited.text,它在.h文件中被定义为

UITextField *textFieldBeingEdited

textFieldBeingEdited不是一个对象,text是该对象的属性吗?

以下代码崩溃:

[tempValues setObject:textFieldBeingEdited forKey:tagAsNum];

如果我将其更改为以下内容,则不会崩溃:

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

这没有意义,因为第一个参数应该是一个对象,而不是一个属性。

2 个答案:

答案 0 :(得分:2)

textFieldBeingEdited.text是UITextField的属性,但它也是NSString类型的对象。

答案 1 :(得分:1)

属性是getter方法的语法糖,它返回一个对象,也可以是一个接受对象的setter方法。 text对象的UITextField属性提供了一个getter方法,该方法返回可以存储在NSString中的NSDictionary对象。

基本上,属性提供了两种方法。例如,由text属性实现/合成的方法可能如下所示(为了示例而简化):

- (NSString *) text
{
    return text;
}

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

当您使用object.text = @"Hello"时,它实际上会发送带有setText:的{​​{1}}消息作为参数,当您使用@"Hello"时,它实际上会发送NSString *value = object.text; } message,返回text个对象。