Top*_*her 0 objective-c instance-variables key-value key-value-coding
谁能解释为什么这在 Objective-C 中有效?我希望它给出一个错误,因为一个对象被分配给一个 int 变量。我知道它确实有效,这很棒,但我想知道为什么允许这样做?
int i = [NSNumber numberWithInt:123];
Run Code Online (Sandbox Code Playgroud)
此外,这似乎存储了错误的值(即,在我的系统上,当我使用 NSLog 打印出“i”的值时,我得到的是“252711”而不是 123);但是,只有在我的主代码中声明和分配变量时。如果我将其声明为对象的实例变量,然后使用键值编码为其赋值,则它可以正常工作:
对象实例变量...
@interface myObject : NSObject
{
int anInt;
}
Run Code Online (Sandbox Code Playgroud)
主要代码...
[myObject setValue:[NSNumber numberWithInt:123] forKey:@"anInt"];
NSLog(@"%@", [myObject valueForKey:@"anInt"]);
Run Code Online (Sandbox Code Playgroud)
这段代码按预期打印出“123”,但我不确定为什么在使用上面看似相似的方法时它无法正常工作。
它不“工作”,并且有关于它的编译器警告。可以编译的原因是NSNumber类方法numberWithInt返回一个指针,可以隐式转换为int. 当您打印出来时,您将获得分配objective-c 对象的地址。
该SetValue:forKey:方法不带int参数,它只带id一个指向通用 Objective-C 对象的指针。键-值编码正在分配的关怀intValue的的NSNumber对你的对象。
| 归档时间: |
|
| 查看次数: |
600 次 |
| 最近记录: |