koa*_*amo 9 c objective-c nsobject
我正在尝试使用大书呆子牧场书来教自己客观c,这是一本非常好的书,但某些方面让我很困惑.
本章讨论的是使用setValue:forKey函数,我理解这是NSObject中定义的方法.书中说你可以在像int或float这样的ac原语上使用它并给出这个例子
我有一个名为Appliance的自定义类,它是一个名为voltage的整数实例变量,用于存储当前设备的电压我初始化一个名为
appliance *a = [[appliance alloc]init];
[a setValue:[NSNumber numberWithInt:240] forKey:@"voltage"];
Run Code Online (Sandbox Code Playgroud)
然后,他设置了一个定制的电压设定器,并在其被调用时记录电压以证明其有效
-(void)setVoltage:int(x) {
NSLog(@"setting voltage to %d",x);
voltage =x;
}
Run Code Online (Sandbox Code Playgroud)
令我困惑的是NSNumber numberWithInt返回一个指向存储在堆上的NSNumber对象的指针是正确的吗?那么他如何使用%d标记记录存储在NSNumber中的整数.我明白这会记录一个整数,但不是传入的对象?此外我认为既然电压被定义为一个整数而不是指向它的指针,它就无法将地址保存到其内存中的对象上?或NSNumber强制它保持其内存地址而不实际将电压声明为指针?
对不起这一章的困惑基本上踢了我的屁股.
Mar*_*n R 26
对象和标量类型之间的转换由键值编码方法自动处理.从文档:
默认实现
valueForKey:并setValue:forKey:提供对非对象数据类型(标量和结构)的自动对象包装的支持.一旦
valueForKey:确定了用于为指定键提供值的特定访问器方法或实例变量,它就会检查返回类型或数据类型.如果要返回的值不是对象,则为该值创建一个NSNumber或NSValue对象,并在其位置返回.同样,
setValue:forKey:确定指定键的相应访问者或实例变量所需的数据类型.如果数据类型不是对象,则使用适当的-<type>Value方法从传递的对象中提取值.
因此,在您的情况下,intValue将自动应用于传递的NSNumber
对象,并将结果整数传递给setVoltage:.
| 归档时间: |
|
| 查看次数: |
7098 次 |
| 最近记录: |