【发布时间】:2013-08-04 20:26:07
【问题描述】:
我正在尝试使用 big nerd 牧场书自学 Objective-c,这是一本非常棒的书,但某些方面让我感到困惑。
当前章节讲的是使用 setValue:forKey 函数,我理解是 NSObject 中定义的一个方法。这本书说你可以在像 int 或 float 这样的 c 原语上使用它,并给出了这个例子
我有一个名为 Appliance 的自定义类,其中有一个 名为 voltage 的整数实例变量,用于存储当前电器的电压 我初始化了一个名为
的新设备appliance *a = [[appliance alloc]init];
[a setValue:[NSNumber numberWithInt:240] forKey:@"voltage"];
然后他为电压设置了一个自定义设置器,并在调用它时记录电压以证明它有效
-(void)setVoltage:int(x) {
NSLog(@"setting voltage to %d",x);
voltage =x;
}
让我困惑的是 NSNumber numberWithInt 返回一个指向存储在堆上的 NSNumber 对象的指针是否正确?那么他如何使用 %d 令牌记录存储在 NSNumber 中的整数。我知道这会记录一个整数,但不是传入的对象?此外,我认为由于电压被定义为整数而不是指向某物的指针,因此它不能将地址保存到内存中的对象?还是 NSNumber 是一种强制它保持其内存地址而不实际将电压声明为指针的方式?
对不起,这一章让我很困惑。
【问题讨论】:
-
请注意,在正常的编码实践中,您通常不会使用
setValue:forKey:或valueForKey:来设置/获取对象的值。只需直接调用 setter/getter 即可。 KVC 的存在主要是为了支持绑定和其他形式的元编程。
标签: objective-c c nsobject